我正在angular2中开发应用程序,这里我使用消息广播将数据从一个组件更新到另一个组件。
这是代码, message_event.ts
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs/Observable';
import {Broadcaster} from './broadcaster';
@Injectable()
export class MessageEvent {
constructor(private broadcaster: Broadcaster) {}
fire(data: string): void {
this.broadcaster.broadcast(MessageEvent, data);
}
on(): Observable<string> {
return this.broadcaster.on<string>(MessageEvent);
}
}
广播者.ts
import {Subject} from 'rxjs/Subject';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/map';
interface BroadcastEvent {
key: any;
data?: any;
}
export class Broadcaster {
private _eventBus: Subject<BroadcastEvent>;
constructor() {
this._eventBus = new Subject<BroadcastEvent>();
}
broadcast(key: any, data?: any) {
this._eventBus.next({key, data});
}
on<T>(key: any): Observable<T> {
return this._eventBus.asObservable()
.filter(event => event.key === key)
.map(event => <T>event.data);
}
}
我已经在其中一个组件中注册/订阅了此事件。
ngOnInit() {
// this.registerStringBroadcast();
this.registerTypeBroadcast();
this.loadId();
}
registerTypeBroadcast() {
this.message_event.on().subscribe(message => {
// alert("true");
this.isUserLogin = true;
this.loadId();
})
在这里我需要检查事件是否已经注册。或者有没有办法销毁/取消订阅这个消息事件。
请帮我解决上述问题。
提前致谢。