当前位置:
首页 >
angular的几种依赖注入方式
发布时间:2024/3/24
57
豆豆
生活随笔
收集整理的这篇文章主要介绍了
angular的几种依赖注入方式
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1、useClass
提供器的一种写法是这样的
providers: [...Service...],其完全写法为
providers: [{provide:Service,useClass:Service}],provide提供token而实际使用的服务为useClass声明的服务,下面这种
providers: [{provide:Service,useClass:anotherService}],如果anotherService需要实现其他的类则要把类中的方法实现如:anotherService实现Service
Service类
import { Injectable } from '@angular/core';@Injectable() export class ServiceService {constructor() { }methods(){console.log('第一种服务类')} }anotherService类
import { Injectable } from '@angular/core'; import {ServiceService} from './service.service';@Injectable() export class AnotherServiceService implements ServiceService{constructor() { }methods(){console.log('另一服务服务类')}anotherMethods(){console.log('另一服务服务类')}}同时服务之间也可以互相使用,前提是必须加上@Injectable()装饰器,
使用法跟组件中一样在构造函数中注入服务。
2、值
它的提供器的token为字符串,使用的是useValue,可以是一个对象,也可以是一个值
providers: [{provide:‘IS_Value’,useValue:false}],注意在组件中获取的方式略有不同,data即为获取到的值
constructor(@Inject('IS_Value') private data) { }3、工厂方法定义提供器
工厂方法只会被调用一次写法如下
provides:[{provide:ServiceService,useFactory:()=>{let dev=Math.random()>0.5if(dev){return new ServiceService()}else {return new AnotherServiceService()}}}]如果工厂函数想要使用提供器的其他服务加入属性deps,并以参数的形式传入
provides:[loggerService,{provide:ServiceService,useFactory:(logger:loggerService)=>{let dev=Math.random()>0.5if(dev){return new ServiceService(logger)}else {return new AnotherServiceService(logger)}}deps:[loggerService]}]这样就相当于实例化了loggerService,不过条件不简单的是通过一个随机数,我们也可以传进去一个值
provides:[loggerService,{provide:‘IS_Value’,useValue:false}{provide:ServiceService,useFactory:(logger:loggerService,val)=>{let dev=Math.random()>0.5if(dev){return new ServiceService(logger)}else {return new AnotherServiceService(logger)}}deps:[loggerService,'IS_Value']}]然后工厂函数会根据deps第二个值搜索并把它传给第二个参数
总结
以上是生活随笔为你收集整理的angular的几种依赖注入方式的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: iGrimace IGevo 非ZNT
- 下一篇: Bugku:web矛盾