2017-08-26 16 views
2

我想清除一個可觀察對象數組。我所做的:如何清除Angular中的Observable <Array[]>?

private pages: Observable<CustomPage[]>; 
//clear 
this.pages.map(p => p = []); 

有沒有直接可觀察法(rxjs)這樣做沒有映射?

+0

https://stackoverflow.com/a/40971371/5468463? – Vega

+1

也許你可以解釋你想要達到的目標。可觀察的事件是一系列事件,所以你實際上無法清除它。通過將它映射到一個空數組,您將把所有發射的值轉換爲該數組,並且我不確定這是您想要的。 –

+0

對不起。我的目標是:服務返回一組使用日期選擇器選擇的給定日期的自定義頁面。假設我在第d1天獲得自定義頁面,並且當我從日期選擇器中選擇另一天d2時,它應該清除自定義頁面數組,創建新的http請求並填充新值。 – Maddy

回答

1

如果你來自英雄之旅教程,你的理解可能會受到他們在那裏展示的基本服務的限制。這裏是一個更全面充實的服務,你想要做什麼的速寫......

export class PageService { 

    private _pages = new ReplaySubject<CustomPage[]>(1); 

    private _dateFilter = new ReplaySubject<DateFilterCriteria>(1); 

    //Subscribe to this in your component 
    get pages(): Observable<CustomPage[]> { 
    return this._pages; 
    } 

    //Use this if you want to display the currently selected date 
    //filter somewhere (e.g. on your date filter control) 
    get dateFilter(): Observable<DateFilterCriteria> { 
    return this._dateFilter; 
    } 

    //PageAccess encapsulates requests against the Http service 
    constructor(private pageAccess: PageAccess) { 
    this._dateFilter.subscribe(dateFilter => this.fetchPages(dateFilter)); 
    this.setNewDateFilter(null); 
    } 

    //Clears out the current list of pages, issues a new request 
    //for pages 
    private fetchPages(dateFilter: DateFilter) { 
    this._pages.next([]); 
    this.pageAccess.fetchPages(dateFilter).subscribe(pages => { 
     this._pages.next(pages); 
    }); 
    } 

    //When your date filter control changes it should call this 
    //method 
    setNewDateFilter(dateFilter: DateFilter) { 
    this._dateFilter.next(dateFilter); 
    } 

} 

另外,我覺得我用DateFilterDateFilterCriteria互換代表的一些類,您使用指示的網頁是什麼日期你要。

+0

太棒了。正是我想要的。 – Maddy