离子2:呼叫事件同时订阅和取消订阅

时间:2016-10-25 08:58:29

标签: angularjs ionic-framework javascript-events ionic2

我正在尝试使用离子角度的PublishSubscribe

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时,我的所有订阅都消失了。

我可以知道订阅和取消订阅活动的好方法吗?

1 个答案:

答案 0 :(得分: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();
    }
}

希望它有所帮助。问候, 哈维