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

为什么angular的依赖注入需要私有或公共才能工作?,angular,typescript,dependency-injection,scope,angular-services,Angular,Typescript,Dependency Injection,Scope,Angular Services,我注意到,如果注入的服务没有明确的范围定义,angular类就不会识别它 下面的代码不起作用 constructor(router: Router) {} 但这一个是 constructor(private router: Router) {} 有人能解释为什么吗?我相信,如果您没有显式地编写属性的范围定义,那么它在默认情况下是公共的,就像类属性一样,但这里的情况似乎不是这样。第一个只是一个参数。第二个参数也是一个声明和设置私有字段的参数。公共路由器:路由器将是一个参数,同时声明和设置一个公

我注意到,如果注入的服务没有明确的范围定义,angular类就不会识别它

下面的代码不起作用

constructor(router: Router) {}
但这一个是

constructor(private router: Router) {}

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

第一个只是一个参数。第二个参数也是一个声明和设置私有字段的参数。公共路由器:路由器将是一个参数,同时声明和设置一个公共字段。DI希望实例将保留注入实例的内容。

无论您在构造函数中定义什么,都将作为参数。您可以将访问器附加到类型脚本,这是一种方便。例如:

constructor(private router: Router) {}
是ES6的缩写:

constructor(router) {
  this.router = router;
}
但是,如果执行以下操作,依赖项注入仍然有效:

constructor(router: Router) {
  // router only available in this scope
}
只是它只在构造函数中可用,在类实例中不可用,因为它在构造函数{}范围内。类字段在类{}范围中定义,因此可在整个类中访问