2016-12-21 4 views
1

나는 각도 2를 사용하는 전자 응용 프로그램이 있습니다. 응용 프로그램은 ipcRenderer를 사용하여 로컬 JSON 파일에서 데이터를로드 할 때까지 제대로 작동합니다. 그런 다음 서비스의 데이터에 작용하는 버튼은 더 이상 변경 감지 프로세스를 트리거하여 뷰를 업데이트하지 않습니다. 여기에 문제를 보여주는 간단한 예제 응용 프로그램을 만들었습니다. https://github.com/marshmellow1328/electron-angular-change-detection전자기로 각도 2 변경 감지

단추가 원래 변경 감지를 트리거하는 것을 멈추게하는 이유가 없습니다. ChangeDetectorRef를 추가하는 것은 필요하지 않아야하는 것처럼 보입니다. 그렇다면 왜 그런지 이해하고 싶습니다.

+0

"수행 안 함"을 클릭하면보기가 유효한 상태로 새로 고침됩니까? – Piou

답변

3

나는 readFile 처리기가 각도 영역 밖에서 실행되기 때문에 문제가 발생했는지 판단했습니다. 따라서 변경 감지를 담당하는 영역을 남겨 두었 기 때문에 클릭 이벤트에 반응하지 않습니다.

가장 쉬운 솔루션은 무엇입니까?

app.component.ts

constructor(private zone: NgZone) { 
... 
this.zone.run(() => { 
    data.values.forEach((value) => { this.service.addValue(value); }); 
}); 

다음 당신은 당신이 명시 적으로 코드를 만들 zone.run(...)으로 this.changeDetector.detectChanges();

제거 할 수는 Angulars 영역 내에서 실행하고 나중에 실행 탐지를 변경합니다.

하나 더 조언 :

내가처럼 app.component.ts에 reduntant 코드를 발견 :

private service: Service; 

constructor(service: Service) { 
    this.service = service; 
} 

당신은 그것을 좋아 다시 작성할 수 있습니다 :

constructor(private service: Service) {} 

희망이 당신을 도와줍니다!

+0

그래서 데이터가 아닌 이벤트를 클릭하면 (버튼을 클릭하면) 영역 (및 변경 감지)이 실행되는 것이 내 인상이었습니다. 이것은 다르게 제안합니다. 그것에 대해 아는 것이 있습니까? – Marshmellow1328

+1

존은'ipcRenderer.on ('load''와'fs.readFile' 이벤트를 패치하지 않습니다. Zone.current가 존입니다.)'cd.detectChanges()를 실행 중일 때, angular2는' 'zone 및 클릭 이벤트가 ''존에 추가됩니다. http://take.ms/uCa9h – yurzui

+1

다음이 입문서를보실 수 있습니다 https://docs.google.com/document/d/1F5Ug0jcrm031vhSMJEOgp1l-Is -Vf0UCNDY-LsQtAIY/edit # heading = h.92cgufnov62k'비동기식 작업이 스케줄되면 콜백 함수는 비동기 API를 호출 할 때 존재했던 영역과 같은 영역에서 실행됩니다. ' – yurzui