请关注 StackBlitz example .请打开开发工具并查看控制台输出,同时在登录和主页链接之间来回切换。每个切换都会添加 HomeViewComponent
的实例出发展阵。
对于那些不喜欢自己经历的人的小代码之旅:
应用程序组件代码处理应用程序的路由。有单个路由器 socket 将加载两个 View 之一。启用 View A 会强制通过 ngOnDestroy
推送 View B生命周期钩子(Hook)。在任何组件中都没有挂起的订阅,没有子引用,没有对组件的隐式或显式引用,什么都没有。换句话说,在 ngOnDestory
之后, 组件可以安全丢弃。
事实证明,旧的组件引用无论如何都不会被丢弃,仍然被 Angular 卡住。
如果出现以下情况,将实现相同的行为:
问题是:
报废?
免责声明
这个话题已经在 Angular bug tracking github 论坛上讨论过了。开发团队声称很明确:在生产模式下不会发生这种情况。如果您检查
main.ts
文件,您可能会看到,这种行为仍然存在。除此之外,我们还获得了生产应用程序的真实示例,这些应用程序会随着时间的推移积累死组件。我要添加
JavaScript
标签,因为这可能与某些 V8/任何其他 JS 引擎实现有关。此问题和示例由 JoshThunar 慷慨提供,非常感谢您的支持。
最佳答案
如果你存储了一个组件的引用,该组件仍然会从 dom 中移除,但类本身将无法被 JS 垃圾回收,因为仍然存在对实际组件的引用。
Angular 本身不涉及垃圾回收,但它会确保在组件被销毁后没有对组件的引用。
关于javascript - Angular Controller 引用实例存在于 ngDestroy 之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64119613/