как уничтожить/отписаться от события широковещательного сообщения в 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();
    })

Здесь мне нужно проверить, уже зарегистрировано событие или нет. Или есть ли способ уничтожить/отписаться от этого события сообщения.

Пожалуйста, помогите мне выше.

Заранее спасибо.


person Kishor T    schedule 05.09.2017    source источник


Ответы (1)


Вы можете вызвать функцию unsubscribe() объекта подписки.

Вам нужно будет назначить подписку на объект, а затем вызвать отмену подписки, когда она вам больше не нужна.

пример:

var subscription$ = this.someservice.subscribe(params);

subscription$.unsubscribe();
person Marco Rosas    schedule 05.09.2017