2016-10-25 204 views
1

我正嘗試使用來自離子角的PublishSubscribeIonic 2:呼叫事件同時訂閱和取消訂閱

subscribe.js

this.events.subscribe('done:eventA', (userEventData) => { 
    //Perform some operations 
    this.startEventB(); 
    this.events.unsubscribe('done:eventA'); <--- 
} 

this.events.subscribe('done:eventB', (userEventData) => { 
    //Perform some operations 
    this.startEventA(); 
} 

this.events.subscribe('done:eventA', (userEventData) => { 
    //Perform some operations 
    this.startEventC(); 
} 

startEventB(){ 
    this.events.publish('done:eventB', data); 
} 

startEventA(){ 
    this.events.publish('done:eventA', data); 
} 

第一一次事件A是發佈我想執行startEventB()
第二時間事件A是發佈我想執行startEventC()所以我試圖第一部分爲unsubscribe
但是當我unsubscribe,我所有的訂閱都沒有了。

我可以知道訂閱和取消訂閱活動的最佳方法嗎?

回答

0

如果您未將第二個參數傳遞給取消訂閱,則所有訂閱者都是removed。如果您想取消訂閱給定訂閱者,您必須訂閱和取消訂閱同一個對象,如here中所述。

我更喜歡的另一種解決方案是在具有RxJS主題類型之一的組件之間共享服務。源類可以使用服務功能進行發佈,該功能可以在主題上進行下一步操作,目標類可以將獲取主題的流視爲可觀察的。

在這裏,你有這種服務的一個例子:

import {Injectable} from '@angular/core'; 
import {Observable} from 'rxjs/Observable'; 
import {Subject} from 'rxjs/Subject'; 

import {Booking} from '../../common/model/booking'; 


@Injectable() 
export class BookingEventsService 
{ 
    private _newChannel: Subject<Booking> = new Subject<Booking>(); 


    constructor() 
    { 
    } 

    publishNew(booking: Booking) 
    { 
     this._newChannel.next(booking); 
    } 

    newChannel(): Observable<Booking> 
    { 
     return this._newChannel.asObservable(); 
    } 
} 

希望它能幫助。問候, Xavi