我希望能够触发其他组件可以订阅的自定义事件,我读到的并不是我想要的,我不希望触发html元素上的任何视图或用户交互我的活动。
如果我的组件具有注销方法:
logout() : void {
// change local storage state
// fire event so other components can update
}
我希望该方法触发其他组件可以订阅的自定义事件,以便他们知道对注销做出反应。
所以另一个组件可能有一个方法:
something() : void{
// subscribe the event here and perform some local action, like changing a login state variable
}
我确定我在使用Ionic而不是纯角钢之前已经做到了这一点...
答案 0 :(得分:1)
我相信在Angular中这种模式的最佳方法是使用服务公开Observable。类似于(例如,在AuthenticationService中):
private loginStatusSource$ = new BehaviorSubject();
public loginStatus$ = this.loginStatusSource$.asObservable();
...
logout() : void {
// change local storage state
this.loginStatusSource$.next(false);
}
getLoginStatus(): Observable<boolean> {
return this.loginStatus$;
}
然后在您的组件中
public loginStatus$: Observable<boolean>;
constructor(private authService: AuthenticationService) {
this.loginStatus$ = this.authService.getLoginStatus();
}
something() : void{
this.loginStatus$.subscribe(status => {
// perform some local action...
});
}
请注意,这是一个简化的示例,您可能希望存储的不仅是布尔值,还包括用户数据之类的东西。可以使用诸如NGRX或Akita之类的状态管理工具,但这是更简单的方法,不需要使用其他依赖项。