对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(或其他模块)。因此,如果该组件被销毁,服务实例也将被销毁?
问题:
当此组件被销毁时,WebsocketService
实例是否也被销毁?
如果我们要在根模块(app.module
)中提供此服务,那么服务是单身吗?如果这个案例和服务是一个单例,那么这个单例是什么时候创建的?
答案 0 :(得分:2)
您可以阅读更多相关信息here
回答你的问题
1-是的,它被销毁了。它完全取决于提供服务的组件生命周期。
请注意,组件提供的服务可能具有有限的生命周期。组件的每个新实例都获得自己的服务实例,当组件实例被销毁时,该服务实例也是如此。
2-是的,它是单身并在整个应用程序中共享。我不确定何时创建了单独的单件服务,但我认为它们是在组件之前创建的,因此如果组件需要服务,它可以在其构造函数中获取它。