如何取消订阅事件订阅

时间:2020-07-31 06:52:43

标签: angular ionic-framework events

我正在使用事件来预订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()
    }

2 个答案:

答案 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)

  • 根据Ionic Documentation.subscription上没有.unsubscriptionEvents方法
  • 只有.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")
}