【发布时间】:2021-02-25 03:56:51
【问题描述】:
我有一个基于 Angular 7 构建的大型应用程序。如果开发人员忘记在 ngOnDestroy 中取消订阅,我想实现一些取消订阅 RxJs 订阅者的功能。这是为了确保应用程序中没有内存泄漏。
Guards 可以吗?当路由发生变化时,Guard 会检查哪个组件最后加载并取消订阅它的订阅者?
【问题讨论】:
-
这能回答你的问题吗? Angular subscribe elegant
我有一个基于 Angular 7 构建的大型应用程序。如果开发人员忘记在 ngOnDestroy 中取消订阅,我想实现一些取消订阅 RxJs 订阅者的功能。这是为了确保应用程序中没有内存泄漏。
Guards 可以吗?当路由发生变化时,Guard 会检查哪个组件最后加载并取消订阅它的订阅者?
【问题讨论】:
我能想到的最简单的方法是在您的应用程序上使用 AsyncPipe
这样,当组件被销毁时,angular 会取消订阅 observable
【讨论】:
Guards 可以吗?当路由发生变化时,Guard 会检查哪个组件最后加载并取消订阅它的订阅者?
不幸的是,没有开箱即用。原因是很难辨别您应该从哪个订阅列表中退订。例如,它可以是以下任何一种:
subscriptions : Subscription[]
subscriptions : any[]
subscriptions : any
甚至是您想要取消订阅的服务中的订阅。
但是,有些库会为您完成其中的一些工作(例如:https://tutorialsforangular.com/2020/12/14/auto-unsubscribing-from-observables-on-ngdestroy/)。不幸的是,它们仍然需要组件上的属性和/或使用某些约定,即您的订阅数组始终命名相同。
也有可能(因为它是开源的),深入研究代码并能够将其应用于路由守卫等。
【讨论】: