我有一个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)

10-06 11:56