【发布时间】:2017-07-20 11:54:20
【问题描述】:
鉴于此代码:
<div *ngFor='let loc of user.locations | async'>
<div *ngFor='let day of days'>
<div *ngFor='let data of get_data_observable(loc, day) | async'>
...
</div>
</div>
</div>
这是连接到 Firebase 数据库。
get_data_observable(loc, day) => this.db.list(`/users/${this.auth.uid}/times/${loc.$key}/${day}`)
我相信每次 Angular 检查最内部的 ngFor 时都会创建一个新的 observable,从而导致大量性能问题。我希望 ngFor 绑定到 get_data_observable(loc, day) 的结果而不是表达式。然后它将订阅一个不会改变的 observable。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
github.com/angular/angular/issues/14826 讨论了这个问题,但建议的解决方案太难实现(分配给静态变量),因为有 3 级嵌套,可能的结果太多。
-
SwitchMap 可能吗? blog.angular-university.io/rxjs-switchmap-operator
-
我不确定这是否能解决这个问题。该问题在github.com/angular/angular/issues/2449 进一步记录,但似乎他们从未最终允许为此使用基于模板的解决方案。将不得不创建一个单独的组件...
标签: javascript angular firebase firebase-realtime-database angularfire2