Angular 依赖注入和数据初始化

问题描述

我有一个概念上的疑问,为什么我们使用构造函数将我们的服务注入组件和 ngOnInit() 生命周期钩子来初始化所有值。在我读过的所有文章中,我知道在 ngOnInit() 中初始化值是一种很好的做法,因为此时所有依赖项都可用。在实践中,我已经看到除此之外,在构造函数中初始化也能正常工作。

关于在构造函数中注入服务,我遇到了这些行

当 Angular 构建组件树时,根模块注入器已经配置好,因此您可以注入任何全局依赖项。此外,当 Angular 实例化子组件类时,父组件的注入器也已经设置好,因此您可以注入在父组件上定义的提供程序,包括父组件本身。组件构造函数是在注入器的上下文中调用的唯一方法,因此如果您需要任何依赖项,这是获取这些依赖项的唯一位置。

然而,我无法判断为什么它是一个好地方。如果有人能帮助我理解这个核心用法,那将是一个很大的帮助。

解决方法

在组件构造函数中,您将注入所有依赖项,因此您可以安全地使用您的服务或其他令牌。

关于在构造函数或 ngOnInit() 中初始化订阅的争论由来已久,但在大多数情况下,这只是品味或风格的问题。

您唯一需要考虑的是,在构造函数中,您没有任何可用的 @Input 值,它们将在 ngOnInit() 中。

如果您扩展组件,请确保调用 super() 或 super.ngOnInit()。

尝试始终利用 Angular DI 而不是手动创建服务或提供依赖项以避免陷阱。

查看文档: https://angular.io/guide/dependency-injection https://angular.io/guide/lifecycle-hooks