Как заставить перерисовку компонента в Angular 2?
Как заставить перерисовку компонента в Angular 2? Для целей отладки, работающих с Redux, я хотел бы заставить компонент повторно отобразить его представление, это возможно?
3 ответов
рендеринг происходит после обнаружения изменений. Чтобы принудительно обнаружить изменения, чтобы измененные значения свойств компонентов распространялись на DOM (а затем браузер отобразит эти изменения в представлении), вот некоторые параметры:
- 
ApplicationRef.ТИК() - аналогично Angular 1's $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 approach
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();
      }
