为什么 angular 的依赖注入需要 private 或 public 才能工作?

Why does angular's dependency injection need private or public to work?

我注意到 angular class 无法识别注入的服务,如果它没有被显式范围定义注入的话。

以下代码无效

constructor(router: Router) {}

但这个确实如此。

constructor(private router: Router) {}

谁能解释一下为什么?我相信,如果您没有明确编写 属性 的范围定义,那么默认情况下它是 public,就像 classes 属性,但在这里似乎不是这种情况.

第一个只是一个参数。第二个是声明并设置私有字段的参数。 (public router: Router 将是 声明并设置 public 字段的参数。)DI 期望实例将保留注入实例的东西。

无论您在构造函数中定义什么,都将作为参数。您可以将访问器附加到它,这是一个 TypeScript 的便利。例如:

constructor(private router: Router) {}

是 ES6 的 shorthand:

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

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

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

只是它只在构造函数内部可用,而在class实例中不可用,因为它在构造函数{}范围内。 class 字段在 class {} 范围内定义,因此可在整个 class

范围内访问