когда вы слушаете прослушиватель событий firebase, он запускает ваш код за пределами угловой зоны. поэтому в основном вам нужно присвоить значения вашей переменной внутри NgZone.
Также принудительно запускает цикл changeDetection с помощью ChangeDetectionRef
с использованием cd.detectChanges()
гарантии того, что изменения успешно отражены. но вам может не понадобиться это делать. делать это только zone.run
не работает в одиночку.
например
import {
NgZone,
ChangeDetectorRef
} from "@angular/core";
@Component({
selector: "Home",
moduleId: module.id,
templateUrl: "./home.component.html",
styleUrls: ["./home-common.css", "./home.css"]
})
export class HomeComponent{
messages=[];
constructor(
private cd: ChangeDetectorRef,
private zone: NgZone
) {
firebase.addValueEventListener( (result) => {
for(var key in result.value){
this.posts.push(result.value[key].Message);
}
this.zone.run(() => {
this.messages = this.posts;
this.cd.detectChanges();
})
//am using this.messges to update the view
this.posts=[];
}, '/forum/messages');
}
}
}