我的根组件中有提供程序的共享服务。我使用此服务来操纵父项以查看所选项目的数量。在父级上,此计数由锚点包围,因此用户可以选择所有项目。但是,我使用共享服务的变量来做到这一点,而我相信应该有一些方法,以便我可以调用observable来获取信息。我的服务代码是
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Promo } from './model';
@Injectable()
export class CheckoutEventService {
private checkOutSucess = new Subject<boolean>();
//private checkOutFailureMsg = new Subject<string>();
private checkedOutPromo = new Subject<Promo>();
//I could not find to remove this and use above property somehow.
public bogusPromoObject :Promo;
checkOutPromo$ = this.checkedOutPromo.asObservable();
checkOutSucess$ = this.checkOutSucess.asObservable();
checkOutPromoSvc(promo: Promo) {
this.checkedOutPromo.next(promo);
this.bogusPromoObject=promo;
}
checkOutPromoSucessSvc(msg: boolean) {
this.checkOutSucess.next(msg);
}
}
我现在正在使用“bogusPromoObj”来呈现此行为。但是,我很想知道是否有办法重用observable来获取历史记录。就这么明确我已经订阅了父母的促销可观察性,但是下一步涉及路由,我想要获取所选项目的历史记录。
答案 0 :(得分:1)
在这种情况下,通常会有一些checkOutPromo$
可观察值和checkOutPromoValue
值。
如果允许主题具有稍后将更改的初始值,则可以使用BehaviorSubject
:
private checkedOutPromo = new BehaviorSubject<Promo|null>(null);
其订阅者将同步收到当前值。如果它是首字母,则会收到null
。由于此主题具有当前值,因此可以使用checkedOutPromo.value
检索,这使得checkOutPromoValue
不必要。该值不会通过asObservable
提供,因此主题应该公开而不是checkOutPromo$
。这就形成了封装问题;例如,checkOutPromo.unsubscribe()
可供所有订阅者使用,但可能有害。
如果仅在视图中使用bogusPromoObject
,则可以省略它,以支持async
管道:
{{ checkoutEventService.checkOutPromo$ | async }}