我有一个Angular服务,该服务保留一个私有BehaviorSubject
,以便它可以在任何给定时间读取值。它是私有的,因此使用它的任何组件都无法对其进行操作。相反,常规Observable
公开为公共。现在,BehaviorSubject
是此可观察对象发出的任何数据的使用者。
public subheaderData$: Observable<SubheaderData>;
private subheaderDataSubject$: BehaviorSubject<SubheaderData> = new BehaviorSubject<SubheaderData>(null);
constructor(private repository: SubHeaderRepository) {
this.subheaderData$ = this.load();
this.subheaderData$.subscribe(this.subheaderDataSubject$);
}
如您所见,我正在通过服务调用
.subscribe
,这使我的可观察性立即变热。我要实现的是,注入此服务的组件必须订阅公共Observable
,并且在发生这种情况时,即使该组件不了解,BehaviorSubject
也应自动添加为观察者(由于它是私有的。如何做到这一点?
最佳答案
在您的服务构造函数中执行此操作
this.subheaderData$ = this.subheaderDataSubject$.asObservable();
然后在需要时订阅
subheaderData$
您可以在您的服务中
this.subheaderDataSubject$.next(someValue)