2017-07-28 8 views
3

私はAngular 4アプリケーションをElectronで実行しています。角度2が更新されない*時々*

私の主なコンポーネントでは、保存されたファイルを開き、そのパラメータを 'session'というオブジェクトに設定するサービスを実行します。

ngOnInit(): void { 


this.Service.ready.subscribe(() => { 

    this.session = this.Service.session; 
    console.log(this.session.name) 

}); 

this.Service.startService(); 
    } 

ファイルダイアログを使用してセッションファイルを開くか、アプリケーションを初期化するときに最後のセッションファイルを読み込みます。私は、ファイルのロードが完了したときに私のサービスが出す「準備完了」イベントを購読してUIを更新します。最新のファイルを開き、ダイアログを使用してファイルを読み込むために、同じ方法を実行することに注意してください。

問題: ダイアログを使用してファイルを開くと、すぐにUIが更新されます。起動時に最後のセッションを読み込むと、UIが更新されません。

何を試してみましたか サービスではNgZoneを使用して変更検出をトリガーします。 サブスクリプションは、正しいセッションが変数 'this.session'に設定されていることを示します。 私はChangeDetectorRefを使用しようとしましたが、違いはありません。

同じメソッドとイベントをトリガするときに変更検出に違いがあるのはなぜですか?まだ初期化されているコンポーネントと関係がありますか?

更新私のサービスからサービス

にゾーンの更新を表示する:

loadSession(path: string): void { 

    fs.readFile(path, { encoding: 'utf-8' }, (err, data) => { 
     if (!err) { 

      var session = JSON.parse(data); 

      console.log(session); 

      this.zone.run(() => { 

       this.session = session; 

       this.readyToStart(); 

       this.notify("Opened Session:", this.session.name, null); 

       console.log("opened session"); 
      }); 

     } else { 
      console.log(err); 
     } 
    }); 
} 

このようLoggerServiceを使用しないのはなぜ私のreadyToStart方法は、 '準備完了' イベント

+0

'サービスはNgZoneを使用して変更検出をトリガします。 – yurzui

+0

サービスコード – WJM

+0

で更新されますか?console.log(this.session.name)の出力が表示されますか? –

答えて

0

を発し:

this.logger.tick_then(() => this.session = this.Service.session); 

これは次回の変更検出サイクルでこの変更を適用します

+0

こんにちはDean、私はこのカスタムメイドのサービスについて話していると思いますか? https://github.com/angular/angular.io/blob/master/public/docs/_examples/lifecycle-hooks/ts/src/app/logger.service.ts私はこれを試しましたが、問題は変わりません – WJM

関連する問題