【问题标题】:When gets a service destroyed that was injected into a dialog? [duplicate]什么时候销毁注入到对话框中的服务? [复制]
【发布时间】:2020-02-21 18:54:39
【问题描述】:

我编写了一个服务并将其注入到我的对话框中。我希望在关闭对话框时调用服务的 ngOnDestroy() 函数。但事实并非如此。

所以我想知道 ngOnDestroy() 什么时候会被解雇?
如果我希望在对话框关闭时终止订阅,我将如何取消订阅服务中的订阅?

这是 stackblitz 示例:https://stackblitz.com/edit/angular-bf1taz

【问题讨论】:

  • 我相信ngOnDestroy生命周期钩子仅适用于组件,即使您可以实现接口,也不会在服务上工作。
  • 它在文档中说:angular.io/api/core/OnDestroy - “当指令、管道或服务被销毁时调用的生命周期钩子”
  • 哦,你是对的,所以这是stackoverflow.com/questions/45898948/…的答案。你应该把你的服务放到组件提供者中,然后它会随着组件一起被销毁,如果它在根提供者中,那么它会在根组件被销毁时被销毁

标签: angular observable angular-lifecycle-hooks


【解决方案1】:

由于您在“services”数组的 app.module.ts 中提供了 Service,因此您的 Service 将是所有组件的全局实例。这是经常需要的,因为您经常使用 Service 在组件之间存储和通信数据,并且不想在使用它的组件被销毁时丢失这些数据。

如果您想拥有不同的服务实例(仅非常谨慎地使用),您需要限制您的提供者。

参考the docs 获取信息。

如果你想重置你的服务,你可以在你的服务中有一个类似重置功能的东西,它会在你之后手动清理并在你的对话框中调用 onClose。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 1970-01-01
    • 2019-12-09
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多