【发布时间】:2017-11-07 07:21:05
【问题描述】:
我有一个服务,它会在初始化时更新 observable 的数据,然后在 http 搜索时更新。
使用 next() 将记录添加到 observable 中的数组中,但是我将如何用新集合替换这些记录?
search.service.ts
private searchSource = new BehaviorSubject<any>(this.getInitialCollections());
public currentState = this.searchSource.asObservable();
public getInitialCollections() {
return this.apiService.post(this.searchApi)
.subscribe(data => this.changeSubject(data));
}
public search(phrase: string) {
return this.apiService.post(this.searchApi, { phrase: phrase })
.subscribe(data => this.changeSubject(data));
}
private changeSubject(results: object) {
this.readCollectionResult(results).map(data => this.searchSource.next(data));
}
private readCollectionResult(result: any): Asset[] {
return (result && result.data) ? result.data.map(asset => asset) : [];
}
组件.ts
export class SearchDataSet {
/** Stream that emits whenever the data has been modified. */
dataChange: BehaviorSubject<Asset[]> = new BehaviorSubject<Asset[]>([]);
get data(): Asset[] { return this.dataChange.value; }
constructor(
private _searchService: SearchService
) {
this.initialize();
}
records = this.data.slice();
initialize() {
this._searchService.currentState
.subscribe(item => !item.id ? null : this.addRecord(item));
}
/** Adds a new asset to the database. */
addRecord(item: object) {
this.records.push(item);
this.dataChange.next(this.records);
}
}
【问题讨论】:
标签: rxjs