【问题标题】:Ionic 2: Calling Events subscribe and unsubscribe simultaneouslyIonic 2:调用事件同时订阅和取消订阅
【发布时间】:2017-03-07 05:55:41
【问题描述】:

我正在尝试使用 ionic-angular 中的 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 时,我所有的订阅都消失了。

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

【问题讨论】:

    标签: javascript angularjs ionic-framework ionic2 dom-events


    【解决方案1】:

    如果不向取消订阅传递第二个参数,则所有订阅者都是removed。如果您想取消订阅给定的订阅者,您必须订阅和取消订阅相同的对象,如 here 所述。

    我更喜欢的另一个解决方案是在具有 RxJS 主题类型之一的组件之间共享服务。源类可以使用对主题执行 next 的服务函数进行发布,目标类可以观察获取主题的流作为可观察对象。

    这里有一个此类服务的示例:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多