【问题标题】:how to destroy/unsubscribe broadcast message event in angular2如何在angular2中销毁/取消订阅广播消息事件
【发布时间】:2018-02-13 18:48:58
【问题描述】:

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

在这里我需要检查事件是否已经注册。 要么 有什么方法可以销毁/取消订阅此消息事件。

请帮帮我。

提前致谢。

【问题讨论】:

    标签: angular2-services angular-broadcast


    【解决方案1】:

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

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

    示例:

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

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 2016-03-30
      • 2021-02-25
      • 2019-05-15
      • 2018-05-06
      相关资源
      最近更新 更多