Ionic 2:调用事件同时订阅和取消订阅

Ionic 2: Calling Events subscribe and unsubscribe simultaneously

本文关键字:取消 调用 事件 Ionic      更新时间:2023-09-26

我正在尝试从离子角度使用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时,我所有的订阅都消失了。

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

如果不向取消订阅传递第二个参数,则所有订阅者都将被删除。如果要退订给定的订阅者,则必须订阅和退订同一个对象,如下所述。

我喜欢的另一个解决方案是在具有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();
    }
}

希望有帮助。问候,哈维