Angular Service 为什么我们要在构造函数上注入

Che*_*pan 3 angular

为什么我们在构造函数中注入服务作为这样的参数?

import { HeroService } from '../hero.service'; 
constructor(private heroService: HeroService) { }
Run Code Online (Sandbox Code Playgroud)

与其作为参数传递,不如我们在构造函数中注入:

import { HeroService } from '../hero.service'; 
constructor() {
    this.heroService=HeroService;
}
Run Code Online (Sandbox Code Playgroud)

是否可以按照上述方式进行?

Sra*_*van 6

因为,你可以在官方文档中找到,

The parameter simultaneously defines a private heroService property and identifies it as a HeroService injection site.

constructor(private heroService: HeroService) { }
Run Code Online (Sandbox Code Playgroud)
  • 当 Angular 创建一个 HeroesComponent 时,依赖注入系统会将 heroService 参数设置为 HeroService 的单例实例。
  • 您可以通过指定具有依赖类型的构造函数参数来告诉 Angular 在组件的构造函数中注入依赖项。这是 HeroListComponent 构造函数,要求注入 HeroService。

笔记:

  • 该组件不应使用 new 创建 HeroService。它应该要求注入 HeroService。

  • 您可以通过指定具有依赖类型的构造函数参数来告诉 Angular 在组件的构造函数中注入依赖项。这是 HeroListComponent 构造函数,要求注入 HeroService。

如果我们不遵循会发生什么:

如果您不想使用依赖注入,您应该每次都创建具有所需依赖项的新服务实例,这是我们不想要的。

此外,我们需要为该服务声明一个新变量

例如:

export class HeroListComponent {
  heroes: Hero[];
  heroService;
  constructor()
  {
    this.heroService = new HeroService('', '');
    this.heroes = this.heroService.getHeroes();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是相同的参考