为什么Angular的依赖注入需要私有或公共才能工作?

问题描述 投票:0回答:3

我注意到,如果没有使用显式范围定义注入,角度类将无法识别注入的服务。

以下代码不起作用

constructor(router: Router) {}

但是这个可以。

constructor(private router: Router) {}

谁能解释一下为什么?我相信,如果您没有显式编写属性的范围定义,那么默认情况下它是公共的,就像类属性一样,但似乎不是这里的情况。

angular typescript dependency-injection scope angular-services
3个回答
6
投票

您在构造函数中定义的任何内容都将被视为参数。这是一个

TypeScript
的便利,您可以将访问器附加到它上面。例如:

constructor(private router: Router) {}

是ES6的简写:

constructor(router) {
  this.router = router;
}

如果您执行以下操作,依赖注入仍然有效:

constructor(router: Router) {
  // router only available in this scope
}

只是它仅在构造函数内部可用,而不是在类实例中可用,因为它在构造函数

{}
范围内。类字段是在类
{}
范围内定义的,因此可以在整个类中访问


1
投票

第一个只是一个参数。第二个是 also 声明并设置私有字段的参数。 (

public router: Router
将是 also 声明并设置公共字段的参数。)DI 期望实例将保留在实例上注入的内容。


0
投票

在 Angular 的构造函数参数中使用私有变量是一种促进封装的约定,利用 TypeScript 的自动属性初始化,并与 Angular 的依赖注入系统保持一致。它有助于打造更干净、更易于维护的代码库。

© www.soinside.com 2019 - 2024. All rights reserved.