2017-09-05 61 views
0

我開發的應用程序在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(); 
    }) 

在這裏我需要檢查事件是否已經註冊或不。 或者 有什麼辦法來破壞/退訂此消息事件。

請幫我郵寄上面。

在此先感謝。

回答

0

你可以調用對象申購的unsubscribe()功能。

你需要將訂閱分配給某個對象,然後調用退訂時,你不需要它了。

例如:

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

subscription$.unsubscribe();