gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:31:58 26 4
gpt4 key购买 nike

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

import { HeroService } from '../hero.service'; 
constructor(private heroService: HeroService) { }

我们为什么不在构造函数中注入(inject),而不是作为参数传递:
import { HeroService } from '../hero.service'; 
constructor() {
this.heroService=HeroService;
}

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

最佳答案

因为,您可以在官方文档中找到,
The parameter simultaneously defines a private heroService property and identifies it as a HeroService injection site.

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

  • 注:
  • 组件不应该使用 new 创建 HeroService。它应该要求注入(inject) HeroService。
  • 您可以通过指定具有依赖类型的构造函数参数来告诉 Angular 在组件的构造函数中注入(inject)依赖。这是 HeroListComponent 的构造函数,要求注入(inject) HeroService。

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

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

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

    例如:
    export class HeroListComponent {
    heroes: Hero[];
    heroService;
    constructor()
    {
    this.heroService = new HeroService('', '');
    this.heroes = this.heroService.getHeroes();
    }
    }

    Here is a reference for the same

    关于Angular Service 为什么我们要在构造函数上注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49755707/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com