欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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的几种依赖注入方式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。