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 {}
否则为每个组件(为每个提供者)创建一个新的服务实例
我正在尝试使用 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 {}
否则为每个组件(为每个提供者)创建一个新的服务实例