2017-03-12 2 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 -에서 - 전자 - 작동하지 않는 ... 정확히 무슨 각도 자바 스크립트 라이브러리 초기화 순서와 같은 영향을받는 영역을 인식하지 못하게 알고 좋을 것입니다 ... –

+1

이 도움이 될 것 같아 https : // blog.thoughtram.io/angular/2016/02/01/zones-in-angular-2.html –

관련 문제