【问题标题】:Angular4: How to bind to function result in ngForAngular4:如何绑定到 ngFor 中的函数结果
【发布时间】: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。

解决这个问题的最佳方法是什么?

【问题讨论】:

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


【解决方案1】:

我通过将最里面的 ngFor 封装在一个组件中来解决这个问题,并将函数参数作为其输入。由于参数本身永远不会改变(每次迭代),因此每个 in-most 项目只会创建一个 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)
    }
}

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2011-10-01
    • 2016-05-11
    • 1970-01-01
    • 2017-08-17
    • 2018-07-19
    相关资源
    最近更新 更多