2017-03-12 7 views
1

私は、次のファイルがあります。角度2の双方向電子アプリの初期ロード時に動作していない結合

topnav.component.ts

import { Component } from '@angular/core'; 
import { EnvironmentService } from '../services/ipc/environment.service'; 

const { ipcRenderer } = electron; 

@Component({ 
    selector: 'app-topnav', 
    templateUrl: './topnav.component.html', 
    styleUrls: ['./topnav.component.scss'] 
}) 
export class TopnavComponent { 
    version: string = null; 

    constructor(private environmentService: EnvironmentService) { 
    this.environmentService.getVersionInfo(); 

    ipcRenderer.on('environment-reply', (event, arg) => { 
     console.log(arg); 
     this.version = arg; 
    }); 
    } 
} 

topnav.component.html

... 
    <div *ngIf="version">{{version}}</div> 
... 

コードでは、実行中の環境に関するバージョン情報を取得しています。バージョンプロパティを更新して、自分のビューで更新されることを期待しています。 getVersionInfo()を呼び出すと、非同期で電子のipcMainおよびipcRenderer通信構造が使用されます。私はこれらが期待どおりに機能していることを確認することができます。角度も電子もない誤差はありません。

実際にバージョンがarg paramに戻ってコンソールに期待どおりに記録されていることを確認しました。しかし、私は私のアプリをナビゲートするまでビューに表示されていません。これは、Angular 2のコンポーネントのライフサイクルと変化の検出と関係があると私に信じています。しかし、私はAngular 2とElectronの両方の初心者です。

何が起こっているのか、どのように修正するのかに関する指針やアイデアはありますか?

答えて

4

Havent used electron ..しかし、ngZoneを試してください。

import { Component,NgZone } from '@angular/core'; 

そして、あなたのコンストラクタで、

constructor(private environmentService: EnvironmentService,private _ngzone:NgZone) { 
    this.environmentService.getVersionInfo(); 

    ipcRenderer.on('environment-reply', (event, arg) => { 
     console.log(arg); 
     this._ngzone.run(()=>{ 
     this.version = arg; 
     }); 
    }); 
    } 

エレクトロンは多分「ゾーン」と角度外の値を更新すると、それを検出できない場合があります。

+0

ありがとうございます!それは完璧に働いた。 –

+0

この回避策ではジョブが実行されますが、毎回このrun()メソッドを呼び出す必要があります。ここで説明したソリューションを成功させることなく試しました。http://stackoverflow.com/questions/41906986/two-way-data-binding角型2イン・エレクトロン・ノー・ワーキング... Angularがjavascriptライブラリの初期化命令のような影響を受けたゾーンを「認識していない」ということを正確に知ってうれしいです... –

+1

これはhttps:// blog.thoughtram.io/angular/2016/02/01/zones-in-angular-2.html –

関連する問題