如何在angular2中销毁/取消订阅广播消息事件

时间:2017-09-05 12:56:09

标签: angular2-services angular-broadcast

我正在 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 个答案:

答案 0 :(得分:1)

您可以调用订阅对象的<table border="1"> <tr> <td> cell 11 </td> <td> cell 21</td> </tr> <tr> <td> cell 12 </td> <td> cell 22</td> </tr> </table>函数。

您需要将订阅分配给对象,然后在您不再需要时调用取消订阅。

示例:

unsubscribe()