Angular4:如何绑定到ngFor中的函数结果

时间:2017-07-20 11:54:21

标签: javascript angular firebase firebase-realtime-database angularfire2

鉴于此代码:

<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)的结果而不是表达式。然后它会订阅一个不会改变的观察者。

最好的解决方法是什么?

1 个答案:

答案 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)
    }
}