angular - 如何防止angular2中的DOM替换ngFor angularfire2中的异步?

标签 angular firebase firebase-realtime-database angularfire2

我在使用 angularfire2 的 angular2 应用程序中有一个异步消息列表。

<message *ngFor="let message of messages | async" [message]="message"></message>

当列表更新时,ngFor 中的所有元素似乎都重新呈现。是否可以只重新呈现列表中的新项目?

最佳答案

重新渲染的发生是因为您在数据检索时更改了对象的实际引用,此时 angular ngFor 重新绘制了所有 DOM 节点。对于这种情况,您可以在此处使用 trackBy,通过它您可以使 *ngFor 更智能。

trackBy 应该基于唯一标识列,在你的情况下我可以说它是 message.id

<message *ngFor="let message of messages | async;trackBy:trackByFn" [message]="message"></message>

代码

trackByFn(message: any){
   // return message != null ? message.id: null;
   // OR
   return message && message.id; //more better
}

关于angular - 如何防止angular2中的DOM替换ngFor angularfire2中的异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39428351/

相关文章:

angular - rxjs:Observable.pipe 不是函数

javascript - 用于向边框添加左线的 SCSS 不起作用

angular - 如何取消订阅 Angular 分量中的多个可观察量?

javascript - 如何将推送通知从 angular 6 项目发送到 android 应用程序

firebase - 在 bigquery 上合并 firebase 事件

java - 尝试在空对象引用上调用虚拟方法 'boolean java.lang.String.equals(java.lang.Object)'

Angular 7 @input 属性 'selected' 在类型 '{}' 上不存在

android - 推送通知不适用于带有 release-apk 的 Android 7.0 (FCM)

javascript - 如何获取Firebase中的唯一ID

swift - 使用 firebase swift 更新字符串