Как заставить перерисовку компонента в 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();
      }