在用 typescript 编写的 Angular 组件中,可以将类成员(变量)声明为构造函数的参数。我的问题是为什么要这样做。
为了让自己清楚,请参阅下面的片段。两者具有相同的含义。
- 第一种是使用依赖注入(inject)机制定义私有(private)成员的经典方法(就像大多数 OO 语言中所做的那样)。
- 如果我没记错的话,后者是 TypeScript 的特殊性。
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;
}
}
如果您的类属性可以与构造函数中的参数具有相同的名称,那么第二个示例中的样式将使您受益。如果它们都可以命名为heroService
,那么您可以这样做:
export class HeroListComponent implements OnInit {
constructor(private heroService:HeroService) { }
}
好处就是它消除了困惑。类中属性的声明以及构造函数参数对该类属性的赋值都消失了。它不一定对您来说更干净或更易读。
关于angular - Angular2 中的依赖注入(inject)语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265819/