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

Wil*_*een 6 dependency-injection angular-services angular-module angular

对 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) {}
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,是WebsocketService在此组件的级别上注入的,而不是在 app.module(或其他模块)上注入的。那么如果这个组件被销毁,服务实例也会被销毁吗?

问题:

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

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

Bun*_*ner 8

你可以在这里读更多关于它的内容

回答您的问题

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

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

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