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

时间:2018-05-05 10:31:05

标签: angular dependency-injection angular-services angular-module

对Angular服务的生命周期有一些疑问。我目前的理解是,如果将服务注入组件,并且该组件的providers数组中提供了服务,则在销毁组件时将销毁该服务。

这是一个不太抽象的例子:

@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注入此组件的级别而不是app.module(或其他模块)。因此,如果该组件被销毁,服务实例也将被销毁?

问题:

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

  2. 如果我们要在根模块(app.module)中提供此服务,那么服务是单身吗?如果这个案例和服务是一个单例,那么这个单例是什么时候创建的?

1 个答案:

答案 0 :(得分:2)

您可以阅读更多相关信息here

回答你的问题

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

  

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

2-是的,它是单身并在整个应用程序中共享。我不确定何时创建了单独的单件服务,但我认为它们是在组件之前创建的,因此如果组件需要服务,它可以在其构造函数中获取它。