У меня есть 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(). Что я делаю неправильно?