Angular:使用构造函数注入服务的替代方法

时间:2018-02-16 17:45:15

标签: angular typescript dependency-injection angular-services

我找到的所有例子,都注入了这样的服务:

export class TestComponent {

  constructor(
    private dataService: DataService,
    private dataService2: DataService2,
    private dataService3: DataService3,
    // ...
    // ...
    // ...
    // ...
    // ...
    // ...
    // ...
  ) {
        // Do something
    }
}

但是,如果您注入多个服务并使用构造函数方法初始化某些内容,则此列表会变得非常长且令人困惑。 所以问题是:
我可以选择性地写这个吗?

export class TestComponent {

  private dataService = new DataService();
  private dataService2 = new DataService2();
  private dataService3 = new DataService3();

  constructor() {
        // Do something
  }
}

1 个答案:

答案 0 :(得分:1)

这取决于您的服务需要做什么。 如果它只是一堆有用的方法,你可以做到,但是在你写这样的事情private dataService = new DataService();的每一个组件中,你都会获得新的服务实例。

另一方面,在我的工作中,我们经常使用服务作为数据存储,从中查询内容,使用此new关键字,您将实例化它,并且不会获取从中传递的任何数据另一个组成部分。

无论如何DI是Angular生态系统的重要组成部分。因此,您可以将它声明为模块上的提供程序(在此之前将您的组件分开依赖于某个模块),这些模块实际上正在使用它们将其数量降低到应用程序模块中。 因为如果你把很多东西注入1个组件构造函数中更好地分离一些功能,因为它可能变得非常难看。