1

我正在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();
    })

在这里我需要检查事件是否已经注册。或者有没有办法销毁/取消订阅这个消息事件。

请帮我解决上述问题。

提前致谢。

4

1 回答 1

1

您可以调用unsubscribe()订阅对象的函数。

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

例子:

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

subscription$.unsubscribe();
于 2017-09-05T18:09:07.167 回答