javascript - Angular Controller 引用实例存在于 ngDestroy 之后

标签 javascript angular

请关注 StackBlitz example .请打开开发工具并查看控制台输出,同时在登录和主页链接之间来回切换。每个切换都会添加 HomeViewComponent 的实例出发展阵。
对于那些不喜欢自己经历的人的小代码之旅:
应用程序组件代码处理应用程序的路由。有单个路由器 socket 将加载两个 View 之一。启用 View A 会强制通过 ngOnDestroy 推送 View B生命周期钩子(Hook)。在任何组件中都没有挂起的订阅,没有子引用,没有对组件的隐式或显式引用,什么都没有。换句话说,在 ngOnDestory 之后, 组件可以安全丢弃。
事实证明,旧的组件引用无论如何都不会被丢弃,仍然被 Angular 卡住。
如果出现以下情况,将实现相同的行为:

  • 引用将存储在某个服务数组中
  • 不会引用存储,但会在开发工具
  • 中浏览内存占用。

    问题是:
  • 为什么 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/

    相关文章:

    javascript - 确定用户点击了哪个图表

    angular - 如何添加自定义 Prime NG 组件

    php - Angular 2 发布对 php 文件的请求

    javascript - 在另一个组件上使用 ngFor 的信息

    javascript - 如何实用地将下拉列表更改为另一个字段的值

    javascript - 可调整大小的 HTML 元素

    javascript - 如何使用 Javascript 使我的 .csv 文本为 'center aligned'?

    angular - 有没有办法知道 rxjs websocket 是否打开

    Angular 2 双向绑定(bind)更新模拟服务常量

    javascript - tensorflow |如何获得两个训练模型之间的模型增量