У меня есть 3 компонента:
c1 содержит c2 и c3
c2 содержит флажок.Когда флажок установлен, я запускаю событие в выходную переменную.
<input type="checkbox" [checked]="displayAxialMap" (click)="onToggleAxialMap()" />
и в компоненте:
onToggleAxialMap() {
this.displayAxialMap = !this.displayAxialMap;
this.toggleMap.emit(<Map>{ display: this.displayAxialMap, mapType: MapType.AXIALMAP, loading: true });
}
в c1 У меня есть объект поведения, называемый displayMap
<c2 (toggleMap)="displayMap.next($event)"></c2>
в c1 Я также передаю значение displayMap в c3
<c3 [displayMap]="displayMap"></c3>
c3 в ngOnInit (). Я делаю это:
this.displayMap.subscribe(map => {
this.loading = map.loading;
this.drawAxialMapCanvas();
this.loading = false;
})
this.loading инициализируется как false.
Все работает (поэтому нет проблем с передачей данных через компоненты).Но this.drawAxialMapCanvas ();это функция, выполнение которой занимает много времени (3-4 секунды), и я вижу два странных поведения:
- флажок в c2 меняется на флажок только после завершения this.drawAxialMapCanvas ().
- локальная переменная «загрузка» внутри c3 (если я отлаживаю код) корректно переходит от false, к true снова в false.Но если я добавлю эту переменную в шаблон:
<... * ngIf "loading"> Загрузка ...
Она никогда не появляется ... Она занимает толькоПоследнее значение!
Кажется, что мой интерфейс обновляется только после завершения this.drawAxialMapCanvas ().Что я делаю не так?