如何使用ReplaySubject使其观察者订阅新的可观察对象时可以重复激发?

时间:2018-11-15 10:02:14

标签: angular typescript ionic-framework

我试图弄清楚如何使用ReplaySubject,以便它的观察者在订阅新的可观察对象(例如HTTP GET)时可以重复触发。

这是我使用的提供程序:

export class CatalogService {
    public borrow$: ReplaySubject<Borrow[]> = new ReplaySubject<Borrow[]>(null);

    constructor(public http: HttpClient) {
    }

    public getBorrowView() {
        this.http.get<Borrow[]>(apiUrl + 'Borrow/View').subscribe(this.borrow$);
    }
    ...
}

我有两个观察员-一个在主要组件中,另一个在未实例化的子组件中。

主要组件中的观察者通过以下方式订阅:

this.catalogService.borrow$.subscribe(
    borrowList => {
        if (borrowList != null)
            this.pages[1].badge = borrowList.length;
    }
);

未实例化的子组件中的观察者以下列方式订阅:

export class BorrowViewPage {
    items$: Observable<Borrow[]>;

    constructor(public navCtrl: NavController, public catalogService: CatalogService, public navParams: NavParams) {
        this.items$ = this.catalogService.borrow$;
    }
}

我希望他们两个都订阅HTTP请求,并在我在主要组件或其他地方进行函数调用时继续响应:this.catalogService.getBorrowView()

但是,此方法只能使用一次。它在子组件上工作正常。对于主要组件,它在第一次之后就不起作用。我尝试取消订阅并将其订阅,但最终导致触发得太早而产生了错误的结果。

0 个答案:

没有答案