即使取消订阅,订阅者也会触发

Posted

技术标签:

【中文标题】即使取消订阅,订阅者也会触发【英文标题】:Subscriber is triggering even it is unsubscribed 【发布时间】:2019-12-30 16:12:30 【问题描述】:

我在 5 个页面中的每个页面中都有一个事件发射器和 5 个订阅者(第 1 页、第 2 页、第 3 页、第 4 页、第 5 页)

我在 ngOnInit() 上订阅了该事件并在 ngOnDestroy() 上取消订阅,

这些页面实际上是路由页面,即一次只会将一个页面加载到 DOM 中

所以我的用例是 最初我转到第 1 页并触发了事件发射器 然后我移动到第 2 页再次触发了事件发射器 我可以观察到这个事件发射器在第 1 页和第 2 页都触发了订阅,

怎么可能,因为我已经退订了, 我该如何解决这个问题?

ngOnInit() 
this.translationService = this.sharedService.language_english.subscribe(
      data => 
        console.log(data)
        this.trigger_translation_module(data);
      
    );


 ngOnDestroy() 

    this.translationService.unsubscribe();
  

【问题讨论】:

【参考方案1】:

我相信角度路由更改不会调用销毁生命周期方法。

以下问题中讨论了解决方法 https://github.com/NativeScript/nativescript-angular/issues/1049

如果您不需要根据页面专门更改服务,您可以简单地在 app.component.ts 构造函数中初始化它,而不是在每个单独的页面中进行初始化

【讨论】:

以上是关于即使取消订阅,订阅者也会触发的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 7 中,为啥即使只订阅一次 HttpClient.post 也会执行两次?

javascript设计模式---发布订阅模式

具有可更新订阅的 iOS 内容块扩展

检测 Paypal 订阅取消

微信小程序-订阅消息定时发送

通过在父级上呈现新的视图控制器 viewWillDisappear 在我取消订阅事件时触发