RxJS Observable заменить поток новыми данными

iamwhitebox спросил: 13 октября 2017 в 07:43 в: rxjs

У меня есть служба, которая обновляет данные наблюдаемой при инициализации, а затем при поиске по http.

Использование next () добавляет записи в массив в наблюдаемой, но как мне заменить их? записи с новым набором?

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) : [];
    }

component.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);
    }
}

0 ответов