【问题标题】:Angular Subscribers - auto unsubscribe a subscriber when the component destroysAngular 订阅者 - 当组件销毁时自动取消订阅订阅者
【发布时间】:2021-02-25 03:56:51
【问题描述】:

我有一个基于 Angular 7 构建的大型应用程序。如果开发人员忘记在 ngOnDestroy 中取消订阅,我想实现一些取消订阅 RxJs 订阅者的功能。这是为了确保应用程序中没有内存泄漏。

Guards 可以吗?当路由发生变化时,Guard 会检查哪个组件最后加载并取消订阅它的订阅者?

【问题讨论】:

标签: angular rxjs-observables


【解决方案1】:

我能想到的最简单的方法是在您的应用程序上使用 AsyncPipe

这样,当组件被销毁时,angular 会取消订阅 observable

参考:https://angular.io/api/common/AsyncPipe

【讨论】:

  • 感谢您的帮助。我的应用程序很大,如果要更改订阅者并在 HTML 中使用 AsyncPipe,工作量会很大。有什么办法可以像警卫一样在中心位置处理这个问题
【解决方案2】:

Guards 可以吗?当路由发生变化时,Guard 会检查哪个组件最后加载并取消订阅它的订阅者?

不幸的是,没有开箱即用。原因是很难辨别您应该从哪个订阅列表中退订。例如,它可以是以下任何一种:

subscriptions : Subscription[]
subscriptions : any[]
subscriptions : any

甚至是您想要取消订阅的服务中的订阅。

但是,有些库会为您完成其中的一些工作(例如:https://tutorialsforangular.com/2020/12/14/auto-unsubscribing-from-observables-on-ngdestroy/)。不幸的是,它们仍然需要组件上的属性和/或使用某些约定,即您的订阅数组始终命名相同。

也有可能(因为它是开源的),深入研究代码并能够将其应用于路由守卫等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2017-04-18
    • 1970-01-01
    • 2018-08-03
    • 2017-01-24
    相关资源
    最近更新 更多