¿Cómo forzar la representación de un componente en Angular 2? Para propósitos de depuración trabajando con Redux, me gustaría forzar a un componente a volver a renderizar su vista, ¿es eso posible?
La representación ocurre después de la detección de cambios. Para forzar la detección de cambios, de modo que los valores de propiedad de los componentes que han cambiado se propaguen al DOM (y luego el navegador mostrará esos cambios en la vista), aquí hay algunas opciones:
$rootScope.$digest() de Angular 1 -- es decir, verifique el árbol de componentes completo$rootScope.$apply(callback) -- es decir, evalúa la función de devolución de llamada dentro de la zona Angular 2. Creo, pero no estoy seguro, que esto termina comprobando el árbol de componentes completo después de ejecutar la función de devolución de llamada.$scope.$digest() -- es decir, verifica solo este componente y sus hijos Deberá importar y luego inyectar ApplicationRef , NgZone o ChangeDetectorRef en su componente.
Para su escenario particular, recomendaría la última opción si solo ha cambiado un componente.
tx, encontré la solución que necesitaba:
constructor(private zone:NgZone) { // enable to for time travel this.appStore.subscribe((state) => { this.zone.run(() => { console.log('enabled time travel'); }); });ejecutar zone.run obligará al componente a volver a renderizarse
Enfoque ChangeDetectorRef
import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; export class MyComponent { constructor(private cdr: ChangeDetectorRef) { } selected(item: any) { if (item == 'Department') this.isDepartment = true; else this.isDepartment = false; this.cdr.detectChanges(); } }