gpt4 book ai didi

数据更改时 Angular View 不更新

转载 作者:行者123 更新时间:2023-12-04 02:59:43 26 4
gpt4 key购买 nike

我正在使用 NativeScript 和使用 Firebase 插件的 Angular 开发聊天应用程序。我正在使用 firebase 事件监听器来监听这样的路径上的更改:

firebase.addValueEventListener( (result) => {
for(var key in result.value){
this.posts.push(result.value[key].Message);
}
this.messages = this.posts;
//am using this.messges to update the view
this.posts=[];


}, '/forum/messages');
}

问题是,当我从我这边发送消息时, View 得到更新,但是当有人从他们这边发送消息时,消息数组发生变化,但除非我重新启动应用程序,否则我看不到它。可能是什么原因造成的。

最佳答案

当您监听 firebase 事件监听器时,它会在 Angular 区域之外运行您的代码。所以基本上你需要在 NgZone 中为你的变量赋值。

还在 ChangeDetectionRef 的帮助下强制运行 changeDetection 循环,使用 cd.detectChanges() 保证更改成功反射(reflect)。但您可能不需要这样做。仅执行此操作 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');
}
}
}

关于数据更改时 Angular View 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50299523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com