Angular-依赖注入
1、依赖,是当类需要执行其功能时,所需要的服务或对象。 DI 是一种编码模式,其中的类会从外部源中请求获取依赖,而不是自己创建它们
在Angular中,DI框架会在实例化该类是向其提供这个类所声明的依赖项。
创建一个可注入的服务类
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class HeroService {
constructor() { }
}
@Injectable()装饰器吧该类标记为可供注入的服务。
2、用服务提供者配置注入器
注入器:Angular 会在执行应用时为你创建注入器,第一个注入器是根注入器,创建于启动过程中。
服务提供者:顾名思义就是 将服务类放到哪个层级(层级包括root、model、component),这个层级就是该服务类的提供者
你可以在三种位置之一设置元数据,来配置将服务类放到哪个层级,以便在应用的不同层级使用提供者来配置注入器:
在服务本身的 @Injectable() 装饰器中。
在 NgModule 的 @NgModule() 装饰器中。
在组件的 @Component() 装饰器中。
@Injectable() 装饰器具有一个名叫 providedIn 的元数据选项,在那里你可以指定把被装饰类的提供者放到 root 注入器中,或某个特定 NgModule 的注入器中。
@NgModule() 和 @Component() 装饰器都有用一个 providers 元数据选项,在那里你可以配置 NgModule 级或组件级的注入器。
3、注入服务
constructor(heroService: HeroService)
在某个注入器的范围内,服务是单例的。
注入器有继承机制,子注入器会继承父注入器的在我们去注入一个服务的时候,会向上查找注入器是否有提供该服务类,如果没有,就向上一层查找,直到根注入器。
所以在这里设计代码时候,我们可以在某个父组件或者模块下提供一个服务类,那么这个服务类的可用范围就是这个父组件树或者模块树下。