Angular学习笔记(五)依赖注入等

依赖注入的好处主要是松耦合的方式编写代码,可测性和可重用性更高。

1.注入器

每个组件都有一个注入器实例负责注入组件需要的对象,注入器是angular提供的一个服务类,一般情况下你不需要直接调用注入器的方法,注入器会自动地通过组件的构造函数将组件所需的对象注入进组件。

constructor(private productService: ProductService){...}

// tips: 控制反转 Inversion of Control 简称IOC 把依赖的控制权从代码的内部转移到代码的外部(代码对外的依赖是由代码的内部决定的) 
1.侧重于描述目的,把依赖的控制权从代码的内部转移到代码的外部
2.依赖注入侧重于描述手段,实现如何控制反转
实际上,Angular就是一个IOC容器

2.提供器

为了让注入器知道需要被注入的对象如何实例化,需要指定提供器

providers:[ProductService]
// 它和下面这个写法是一样的
providers:[{ provide: ProductService, useClass: ProductService }]
// 使用useClass属性具体实例化类
providers:[{ provide: ProductService, useClass: AnotherProductService }]
providers:[{ provide: ProductService, useFactory:() => {...} }]

// 提供器的作用域:
  // 1.当一个提供器声明在模块时,它对所有组件可见,所有组件都可以注入该提供器(product1Component组件用的就是这个)
  // 2.当一个提供器声明在组件中时,它对当前组件及其子组件可见,其他组件不可以注入。
  // 3.当声明在模块的提供器和声明在组件的提供器具有相同的token时,声明在组件中的提供器会覆盖声明在模块中发的提供器。
  // 4.一般情况下,优先将服务提供器声明在模块中,只有某个服务提供器必须对某个组件可用且其他组件不可用时,将其声明在组件中。

3.工厂方法

根据某些条件,决定实例化哪些对象;实例化对象时,调用对象的构造函数,需要传递参数,这个时候使用工厂提供器

 useFactory 工厂提供器

4.注入器的层级关系

你可能感兴趣的:(Angular学习笔记(五)依赖注入等)