假设我想从商店检索一组记录,并使用*ngFor
(例如,如何使用RxJS和Angular2构建真正的可观察集合?
<ul>
<li *ngFor="let record in records | async">
...
</li>
</ul>
现在,用户点击“新建...”按钮,另一个记录添加到存储和
recordAdded: EventEmitter<string>;
火灾告诉我的位置。因此,我从商店获得新唱片 - 只有唱片 - 哎呀,我如何让我的*ngFor
显示这个额外的唱片?
好了,我可以保持所有记录在阵列,例如
_records: Record[];
,并通过订阅Observable<Record[]>
像
this.recordService.getAll().subscribe(r => this._records = r);
填补这个数组,但这个数组需要有一个Observable
本身以便在有新的记录时通知消费者。所以
observableRecords = Observable.create(obs => {
this.recordService.getAll().subscribe(rec => {
this._records = rec;
obs.next(rec);
// Got the array published, now waiting for events
this.recordAdded.subscribe(rec => {
this._records.push(rec);
obs.next(this._records);
});
});
});
啊...这不仅是痛苦的看,也有一吨的开销作为整个数组被重新出版每次添加一个新的记录时间和 - 最有可能的 - 角2将每一次从头开始重新构建整个列表。
由于这是一个很常见的情况,我想必须有更好的方法来做到这一点。