Estoy escribiendo un componente Angular que tiene una propiedad Mode(): string .
Me gustaría poder establecer esta propiedad mediante programación, no en respuesta a ningún evento.
El problema es que, en ausencia de un evento del navegador, un enlace de plantilla {{Mode}} no se actualiza.
¿Hay alguna manera de activar esta detección de cambios manualmente?
Prueba uno de estos:
ApplicationRef.tick() - similar a $rootScope.$digest() de AngularJS, es decir, verifique el árbol de componentes completoNgZone.run(callback) - similar a $rootScope.$apply(callback) -- es decir, evalúa la función de devolución de llamada dentro de la zona Angular. 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.ChangeDetectorRef.detectChanges() - similar a $scope.$digest() -- es decir, verifica solo este componente y sus hijos Puede inyectar ApplicationRef , NgZone o ChangeDetectorRef en su componente.
Usé la referencia de respuesta aceptada y me gustaría poner un ejemplo, ya que la documentación de Angular 2 es muy difícil de leer, espero que esto sea más fácil:
Importar NgZone :
import { Component, NgZone } from '@angular/core';Agrégalo a tu constructor de clase.
constructor(public zone: NgZone, ...args){} Ejecute el código con zone.run :
this.zone.run(() => this.donations = donations)Pude actualizarlo con markForCheck()
Importar ChangeDetectorRef
import { ChangeDetectorRef } from '@angular/core';Inyectar e instanciarlo
constructor(private ref: ChangeDetectorRef) { }Finalmente marque la detección de cambios para que tenga lugar
this.ref.markForCheck();Aquí hay un ejemplo donde markForCheck() funciona y detectChanges() no.
https://plnkr.co/edit/RfJwHqEVJcMU9ku9XNE7?p=preview
EDITAR: Este ejemplo ya no representa el problema :( Creo que podría estar ejecutando una versión Angular más nueva donde está arreglado.
(Presione STOP/RUN para ejecutarlo nuevamente)