![](/img/trans.png)
[英]Dependency Injection in Angular2 - TypeScript syntax vs @Inject
[英]Syntax for Dependency Injection in Angular2
在用Typescript编写的Angular Components中,可以将类成员(变量)声明为构造函数的参数。 我的问题是为什么这样做。
为了使自己清楚,请参见下面的代码片段。 两者具有相同的含义。
export class HeroListComponent implements OnInit {
// private member declaration
private heroService:HeroService;
// constructor signature
constructor(service:HeroService) {
// private member assignment
this.heroService = service;
}
}
export class HeroListComponent implements OnInit {
// here the private member is declared inside the constructor signature
constructor(private heroService:HeroService) { }
}
在我看来,对于不熟悉TypeScript的人来说,第一种语法更加清晰易懂。
因此,我想知道是否有除了使用更短的代码以外的任何特殊原因(这实际上并不重要,因为代码最终将被缩小/丑化)。 谢谢。
编辑:此答案解决了原始问题(现已编辑),第二个示例如下所示:
export class HeroListComponent implements OnInit {
// here the private member is declared inside the constructor signature
constructor(private service:HeroService) {
this.heroService = service;
}
}
在第二个示例中,您实际上是在创建两个类属性。 this.service
和this.heroService
都将存在于您的对象中。
您的第二个示例就是这样:
export class HeroListComponent implements OnInit {
private heroService: HeroService;
private service: HeroService;
constructor(service:HeroService) {
this.service = service;
this.heroService = service;
}
}
如果您的class属性可以与构造函数中的参数具有相同的名称,则第二个示例中的样式将使您受益。 如果它们都可以被命名为heroService
,那么您可以这样做:
export class HeroListComponent implements OnInit {
constructor(private heroService:HeroService) { }
}
好处是它消除了混乱。 类中属性的声明以及对该类属性的构造方法参数的分配都消失了。 它不一定对您来说更干净或更易读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.