代码之家  ›  专栏  ›  技术社区  ›  Willem van der Veen

角度依赖注入,服务生命周期

  •  6
  • Willem van der Veen  · 技术社区  · 7 年前

    有一些关于角度服务寿命的问题。我目前的理解是,如果将服务注入到组件中,并且该服务是在该组件的提供者数组中提供的,那么当该组件被销毁时,该服务将被销毁。

    下面是一个不那么抽象的示例:

    @Component({
      selector: 'app-offline-header',
      templateUrl: './offline-header.component.html',
      styleUrls: ['./offline-header.component.css'],
      providers: [WebsocketService]
    })
    
    export class OfflineHeaderComponent{ 
      constructor(private socket: WebsocketService) {}
    }
    

    在上述示例中 WebsocketService 在该组件的级别上注入,而不是在应用程序上注入。模块(或其他模块)。那么,如果该组件被销毁,服务实例也将被销毁?

    问题:

    1. 当此组件被销毁时 WebsocketService 实例是否也已销毁?

    2. 如果我们要在根模块中提供此服务( app.module ),那么服务是单身吗?如果是这种情况,并且服务是单例的,那么该单例是何时创建的?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Bunyamin Coskuner    7 年前

    你可以了解更多 here

    回答您的问题

    1-是的,它被摧毁了。它完全取决于提供服务的组件的生命周期。

    请注意,组件提供的服务可能具有有限的生存期。组件的每个新实例都会获得自己的服务实例,当组件实例被销毁时,服务实例也会被销毁。

    2-是的,它是单例的,并在整个应用程序中共享。我不确定单例服务是什么时候创建的,但我认为它们是在组件之前创建的,这样如果组件需要服务,它就可以在其构造函数中获得它。

    推荐文章