Angular 2更好的消息服务

时间:2016-11-24 14:40:23

标签: angularjs angular typescript

我有一个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(['/']);
}

}

1 个答案:

答案 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