3 ответов:
рендеринг происходит после обнаружения изменений. Чтобы принудительно определить изменения, чтобы измененные значения свойств компонента распространялись на DOM (а затем браузер отобразит эти изменения в представлении), вот несколько вариантов:
- ApplicationRef.ТИК() - похоже на угловой 1-х
$rootScope.$digest()-- т. е. проверьте полное дерево компонентов- NgZone.run (обратный вызов) - аналогично
$rootScope.$apply(callback)-- т. е. оценить обратный вызов функция внутри угловой зоны 2. Я думаю, но я не уверен, что это заканчивается проверкой полного дерева компонентов после выполнения функции обратного вызова.- ChangeDetectorRef.detectChanges () - аналогично
$scope.$digest()-- т. е. проверьте только этот компонент и его дочерние элементывам нужно будет импортировать, а затем впрыснуть
ApplicationRef,NgZoneилиChangeDetectorRefв компоненте.для вашего конкретного сценария я бы рекомендовал последний вариант если изменился только один компонент.
tx, нашел обходной путь, который мне нужен:
constructor(private zone:NgZone) { // enable to for time travel this.appStore.subscribe((state) => { this.zone.run(() => { console.log('enabled time travel'); }); });запуск зоны.run заставит компонент повторно визуализировать
ChangeDetectorRef подход
import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; constructor(private cdr: ChangeDetectorRef) { } selected(item: any) { if (item == 'Department') this.isDepartment = true; else this.isDepartment = false; this.cdr.detectChanges(); }
Comments