angular的几种依赖注入方式
生活随笔
收集整理的這篇文章主要介紹了
angular的几种依赖注入方式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、useClass
提供器的一種寫法是這樣的
providers: [...Service...],其完全寫法為
providers: [{provide:Service,useClass:Service}],provide提供token而實(shí)際使用的服務(wù)為useClass聲明的服務(wù),下面這種
providers: [{provide:Service,useClass:anotherService}],如果anotherService需要實(shí)現(xiàn)其他的類則要把類中的方法實(shí)現(xiàn)如:anotherService實(shí)現(xiàn)Service
Service類
import { Injectable } from '@angular/core';@Injectable() export class ServiceService {constructor() { }methods(){console.log('第一種服務(wù)類')} }anotherService類
import { Injectable } from '@angular/core'; import {ServiceService} from './service.service';@Injectable() export class AnotherServiceService implements ServiceService{constructor() { }methods(){console.log('另一服務(wù)服務(wù)類')}anotherMethods(){console.log('另一服務(wù)服務(wù)類')}}同時(shí)服務(wù)之間也可以互相使用,前提是必須加上@Injectable()裝飾器,
使用法跟組件中一樣在構(gòu)造函數(shù)中注入服務(wù)。
2、值
它的提供器的token為字符串,使用的是useValue,可以是一個(gè)對(duì)象,也可以是一個(gè)值
providers: [{provide:‘IS_Value’,useValue:false}],注意在組件中獲取的方式略有不同,data即為獲取到的值
constructor(@Inject('IS_Value') private data) { }3、工廠方法定義提供器
工廠方法只會(huì)被調(diào)用一次寫法如下
provides:[{provide:ServiceService,useFactory:()=>{let dev=Math.random()>0.5if(dev){return new ServiceService()}else {return new AnotherServiceService()}}}]如果工廠函數(shù)想要使用提供器的其他服務(wù)加入屬性deps,并以參數(shù)的形式傳入
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]}]這樣就相當(dāng)于實(shí)例化了loggerService,不過條件不簡(jiǎn)單的是通過一個(gè)隨機(jī)數(shù),我們也可以傳進(jìn)去一個(gè)值
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']}]然后工廠函數(shù)會(huì)根據(jù)deps第二個(gè)值搜索并把它傳給第二個(gè)參數(shù)
總結(jié)
以上是生活随笔為你收集整理的angular的几种依赖注入方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iGrimace IGevo 非ZNT
- 下一篇: 毕业设计-电商秒杀系统