鉴于此代码:
<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)
的结果而不是表达式。然后它会订阅一个不会改变的观察者。
最好的解决方法是什么?
答案 0 :(得分:0)
我通过将最多的ngFor包含在一个组件中,并将函数参数作为其输入来解决这个问题。由于参数本身永远不会改变(每次迭代),因此只为每个最里面的项创建一个observable。
<app-day [loc]='loc' [day]='day'></app-avail-day>
和
export class DayComp {
obs
@Input() loc
@Input() day
ngOnChanges(){
this.obs = get_data_observable(this.loc, this.day)
}
}