【问题标题】:How to clear Observable<Array[]> in Angular?如何在 Angular 中清除 Observable<Array[]>?
【发布时间】:2018-02-04 04:42:15
【问题描述】:

我想清除一个可观察对象数组。我做了什么:

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

是否有直接的 Observable 方法(rxjs)可以在没有映射的情况下执行此操作?

【问题讨论】:

  • 也许你可以解释你想要达到的目标。可观察对象是事件流,因此您实际上无法清除它。通过将其映射到一个空数组,您会将所有发出的值转换为该数组,我不确定这是否是您想要的。
  • 很抱歉。我的目标是:服务返回一组使用日期选择器选择的给定日期的自定义页面。因此,假设我获得了第 d1 天的自定义页面,当我从日期选择器中选择另一天 d2 时,它应该清除自定义页面数组,发出新的 http 请求并填充新值。

标签: angular rxjs observable


【解决方案1】:

我发现这非常有效,而且非常直接。

this.someObservable = of([]);  <-- Assigning empty array to an observable.

'of' 是 rxjs 库的一部分,它返回一个 observable,因此您可以在此处将其与赋值运算符一起使用。

希望这会有所帮助:)

【讨论】:

  • 优秀.. 像魅力一样工作
【解决方案2】:

又短又甜

new Observable<[]>();

【讨论】:

    【解决方案3】:

    如果您来自英雄之旅教程,您的理解可能会受到他们在那里展示的非常基本的服务的限制。这是一个更完整的服务的快速草图,可以满足您的需求......

    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 来表示您用来指示您想要的页面日期的某个类。

    【讨论】:

    • 太棒了。正是我想要的。
    猜你喜欢
    • 2018-03-04
    • 2018-08-30
    • 2017-12-13
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多