繁体   English   中英

Angular2中依赖注入的语法

[英]Syntax for Dependency Injection in Angular2

在用Typescript编写的Angular Components中,可以将类成员(变量)声明为构造函数的参数。 我的问题是为什么这样做。
为了使自己清楚,请参见下面的代码片段。 两者具有相同的含义。

  • 第一种是使用依赖项注入机制定义私有成员的经典方法(这在大多数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.servicethis.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM