angular2 从服务向所有使用该服务的组件广播事件

angular2 broadcasting event from service to all components using that service

我正在尝试使用 angular2 中的 "Subject" class 将事件作为可观察对象广播,从服务到所有包含该服务实例的组件。

在我的服务中,我有以下内容:

private loggedIn = new Subject<boolean>();

isUserLoggedIn(): Observable<boolean> 
{
    return this.loggedIn.asObservable();
}

test() 
{
  this.loggedIn.next(true);
}

然后在使用此服务的组件中,我有(_auth 是上面定义的相同服务):

ngOnInit()
    {
        console.log("yay!");
        this._auth.isUserLoggedIn()
            .subscribe(
                d => {
                    console.log(d);
                },
                d => {
                    console.log(d);
                },
                () => {
                    console.log("Done!");
                }
            );
    }

现在的问题是,如果我从同一个组件中调用服务的方法 this._auth.test();,一切正常,console.log 行会在该组件中执行。但是,如果服务的方法是从另一个组件调用的,则该组件不会被触发到 运行 console.log 行。

如何确保此组件中的代码 运行 即使服务的方法由另一个组件触发? (假设两个组件同时渲染)。

谢谢!

不在每个组件上提供服务,只在

中提供
@NgModule({ 
  providers: MySharedService, 
  ...
})
export class AppModule {}

否则为每个组件(为每个提供者)创建一个新的服务实例