假設我想從商店檢索一組記錄,並使用*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將每一次從頭開始重新構建整個列表。
由於這是一個很常見的情況,我想必須有更好的方法來做到這一點。