我有一个MessageService类,它有一个触发事件的setMessage方法,还有一个MainComponent类,它是侦听此事件的所有组件的父组件。所以事件将是火,MainComponent将捕获它,一切都很好。但有一个问题。当用户更改组件时我想要的,例如:从仪表板组件导航到用户组件,消息自动被销毁。但这里没有发生这种情况,消息仍会显示给用户。我写了一个计时器,以便在一段时间后删除该消息,但我想知道是否有更好的方法来实现这一点
这是我的留言服务类:
import {ReplaySubject} from 'rxjs/ReplaySubject';
export class MessageService{
public messageSource;
public messageEvent;
constructor(){
this.messageSource = new ReplaySubject(1);
this.messageEvent = this.messageSource.asObservable();
}
public setMessage(message){
this.messageSource.next(message);
window.setTimeout(()=>{
this.destruct();
},5000);
}
public destruct(){
this.messageSource.next(null);
}
这是我的主要组件类:
export class MainComponent extends BaseComponent{
constructor(public router:Router,public authService:AuthService,public messageService:MessageService){
super(router);
this.messageService.messageEvent.subscribe(msg => {
this.message = msg;
});
}
public logout(){
this.authService.removeToken();
this.permission.user = null;
this.router.navigate(['/']);
}
}
答案 0 :(得分:0)
触发删除组件的ngOnDestroy生命周期挂钩中的消息。它会在组件被销毁时触发。
@Component({selector: 'my-cmp', template: `...`})
class MyComponent implements OnDestroy {
ngOnDestroy() {
// your code will go here
}
}
在此处阅读更多内容:https://angular.io/docs/ts/latest/api/core/index/OnDestroy-class.html