Angular依赖注入小解
Posted 有个对象、有点儿时间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular依赖注入小解相关的知识,希望对你有一定的参考价值。
1、什么是依赖注入?
答:依赖注入,就是在开发一个大型功能时,将所需要的一些辅助性的工具、他人已经开发好的小功能、服务器数据请求以一种依赖的方式注入到正在开发的功能中的操作
2、依赖注入的流程?
答:
a、通过@Injectable装饰器定义一个可注入的服务类,如果是非类的服务则首先需要利用InjectionToken生成注入令牌
注:@Component\\@directive\\@Pipe都是@Injectable的子类
b、注册服务的方式有多种,可以在根模块AppModule的中或者根组件中,或者具体的功能组件中的providers提供商装饰器参数对象属性中进行注册,根级可在应用内容共享,组件级只针对组件本身及其子组件
c、完成上述步骤后在需要使用的依赖服务的组件类中,以构造函数参数的形式进行注入,或者将组建类内置的注入器Injector手动注入到构造函数参数中,在构造函数中手动注入需要的服务如:this.injector.get(‘服务名’)
注:手动注入方式也必须完成前两步操作
3、非类依赖服务
答:非类依赖服务即基础数据类型值、对象、集合等类型的值,此类服务注册时
a、需要使用InjectionToken生成注册令牌,即:injectToken = new InjectionToken(\'描述’);
b、然后在providers数组中注册依赖服务,即:provide: injectToken, useValue: \'服务内容’
c、在需要使用此类服务的类组件中,在构造函数的参数中使用注入注解@Inject注入,即:@Inject(injectToken) service: serviceType
4、在提供商provider中注册服务的方式
答:
a、provide: serviceClass, useClass:serviceClass,使用服务类进行注册服务,即注册通过@Injectable定义的类
b、provide: serviceClass, useFactory: serviceClassFactory, deps: [param1, param2,...],由于注册此依赖服务时需要一些其他数据的辅助,而这些数据又可能是异步获取的,因此使用服务类工厂的方式,在工厂内部进行服务类依赖的处理并返回此服务类的实例,deps为工厂函数依赖的服务项,会以工厂函数参数的形式传入
c、provide: serviceClass, useExisting: serviceClassNewName,当你有newLogger和oldLogger两个日志服务时,希望oldLogger服务更换为newLogger,可以使用useExisting设置类的别名,在令牌不变的情况下使用同一个依赖服务类
d、provide: serviceInjectionToken, useValue: ‘简单值’,用于注册非类服务依赖,需要使用new InjectionToken生成注册令牌,即:serviceInjectionToken
5、组件类构造函数定义可选参数
答:@Optional()定义可选项,未提供时值为null
官网地址:https://angular.cn/guide/dependency-injection
以上是关于Angular依赖注入小解的主要内容,如果未能解决你的问题,请参考以下文章