为什么 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
范围内访问
我注意到 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