Как уничтожить / отписать событие широковещательного сообщения в angular2
Я разрабатываю приложение на 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);
}
}
broadcaster.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();
})
Здесь мне нужно проверить событие уже зарегистрировано или нет. Или есть ли способ уничтожить / отписаться от этого события сообщения.
Пожалуйста, помогите мне для выше.
Заранее спасибо.
1 ответ
Вы можете позвонить unsubscribe()
функция объекта подписки.
Вам нужно будет назначить подписку на объект, а затем вызвать отмену подписки, когда она вам больше не нужна.
пример:
var subscription$ = this.someservice.subscribe(params);
subscription$.unsubscribe();