我正在使用事件来预订Ionic 3应用程序中的事件。似乎有两种取消订阅的方式,如unsubscription1()
和unsubscription2()
请问这两种方法有什么区别?他们两个都可以按预期取消订阅吗?
import { Events } from 'ionic-angular';
...
messageSubscription: any
constructor(private events: Events ...){
...
}
subscription(){
messageSubscription = this.events.subscription("newmessage", () => {
...
}
}
unsubscription1(){
this.events.unsubscription("newmessage")
}
unsubscription2(){
messageSubscription.unsubscribe()
}
答案 0 :(得分:1)
为销毁条件声明变量
public destroyed = new Subject();
添加ngDestroy生命周期挂钩
ngOnDestroy() {
this.destroyed.next();
this.destroyed.complete();
}
并使用takeUntil()。使用takeUntil之类的运算符代替手动取消订阅也将完成可观察对象,从而触发可观察对象上的任何完成事件。
this.events.
.pipe(takeUntil(this.destroyed))
subscription("newmessage", () => {
...
}
答案 1 :(得分:1)
.subscription
上没有.unsubscription
和Events
方法.subscribe(<eventname>, () => {})
和.unsubscribe(<eventname>, () => {})
this.events.subscribe(<event>, () => {})
的返回类型为void
。messageSubscription
变量不包含任何内容,并且以下代码不会取消订阅事件unsubscription2(){ messageSubscription.unsubscribe(); }
因此,用于订阅和取消订阅的正确代码如下所示:
import { Events } from 'ionic-angular';
...
constructor(private events: Events...) {
...
}
subscription() {
this.events.subscribe("newmessage", () => {
...
});
}
unsubscription1() {
this.events.unsubscribe("newmessage")
}