我正在尝试使用离子角度的Publish
和Subscribe
。
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 :(得分: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();
}
}
希望它有所帮助。问候, 哈维