最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angular 4依賴注入學(xué)習(xí)教程之FactoryProvider配置依賴對(duì)象(五)

 更新時(shí)間:2017年06月04日 10:02:04   作者:semlinker  
這篇文章主要給大家介紹了關(guān)于Angular 4依賴注入之FactoryProvider配置依賴對(duì)象的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。

學(xué)習(xí)目錄

本文主要給大家介紹了關(guān)于Angular 4依賴注入之FactoryProvider配置依賴對(duì)象的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)看看詳細(xì)的介紹:

本系列教程的開(kāi)發(fā)環(huán)境及開(kāi)發(fā)語(yǔ)言:

基礎(chǔ)知識(shí)

Console 對(duì)象

Console 對(duì)象可以在任何全局對(duì)象中訪問(wèn),如 Window,WorkerGlobalScope 以及通過(guò)屬性工作臺(tái)提供的特殊定義。在瀏覽器中我們可以通過(guò) Window.console 訪問(wèn) console 對(duì)象,使用示例如下:

console.log('My nickname is semlinker');

FactoryProvider 的作用

FactoryProvider 用于告訴 Injector (注入器),通過(guò)調(diào)用 useFactory 對(duì)應(yīng)的函數(shù),返回 Token 對(duì)應(yīng)的依賴對(duì)象。

FactoryProvider 接口

export interface FactoryProvider {
 // 用于設(shè)置與依賴對(duì)象關(guān)聯(lián)的Token值,Token值可能是Type、InjectionToken、
 // OpaqueToken的實(shí)例或字符串
 provide: any;
 // 設(shè)置用于創(chuàng)建對(duì)象的工廠函數(shù)
 useFactory: Function;
 // 依賴對(duì)象列表
 deps?: any[];
 // 用于標(biāo)識(shí)是否multiple providers,若是multiple類型,則返回與Token關(guān)聯(lián)的依賴
 // 對(duì)象列表
 multi?: boolean;
}

FactoryProvider的使用 這篇文章中,我們已經(jīng)介紹了 FactoryProvider 的一些相關(guān)知識(shí)。接下來(lái)我們將介紹如何使用 FactoryProvider 配置依賴對(duì)象。

FactoryProvider

俗話說(shuō)得好,溫故而知新。我們先來(lái)回顧一下上一節(jié)創(chuàng)建的 LoggerService 服務(wù):

export class LoggerService {
 constructor(private enable: boolean) { }

 log(message: string) {
 if(this.enable) {
  console.log(`LoggerService: ${message}`);
 }
 }
}

LoggerService 的正確配置方式如下:

@NgModule({
 ...,
 providers: [
 HeroService,
 {
 provide: LoggerService, 
 useFactory: () => {
 return new LoggerService(true);
 }
 }
 ],
 bootstrap: [AppComponent]
})
export class AppModule { }

在繼續(xù)介紹前,我們先來(lái)了解一下 Angular 的一大特色:

跨平臺(tái)開(kāi)發(fā)

學(xué)習(xí)如何基于 Angular 構(gòu)建應(yīng)用程序,并復(fù)用代碼和技能來(lái)構(gòu)建適用于所有平臺(tái)的應(yīng)用。比如:Web應(yīng)用、移動(dòng)Web應(yīng)用、原生移動(dòng)應(yīng)用和原生桌面應(yīng)用等。

沒(méi)錯(cuò),Angular 框架的一大特色就是跨平臺(tái)開(kāi)發(fā)。回到正題,不知道讀者有沒(méi)有察覺(jué)到,在 LoggerService 類中的 log() 方法內(nèi),我們是直接使用 console.log() 方法輸出調(diào)試信息。雖然在大多數(shù)情況下,我們的應(yīng)用都是運(yùn)行在瀏覽器環(huán)境下,但 console.log() 存在兼容性問(wèn)題 (了解詳細(xì)信息 - Can I Use)。除此之外,假如日后我們的應(yīng)用需要運(yùn)行在其它平臺(tái)下,就會(huì)出現(xiàn)問(wèn)題。

為了解決上述問(wèn)題,我們可以創(chuàng)建一個(gè) ConsoleService 服務(wù),且該服務(wù)需實(shí)現(xiàn)統(tǒng)一的 Console 接口。但本文的重點(diǎn)不在這里,因此我們先簡(jiǎn)單實(shí)現(xiàn)一個(gè) ConsoleService 服務(wù):

export class ConsoleService {
 log(message) {
 console.log(`ConsoleService: ${message}`);
 }
}

接下來(lái)我們就需要更新先前的 LoggerService 服務(wù):

export class LoggerService {
 constructor(private enable: boolean,
 consoleService: ConsoleService) { }

 log(message: string) {
 if (this.enable) {
  console.log(`LoggerService: ${message}`);
 }
 }
}

但當(dāng)我們更新完 LoggerService ,成功保存后,你會(huì)看到以下異常信息:

app.module.ts (27,16): Supplied parameters do not match any signature of call target.

這說(shuō)明提供的參數(shù)與調(diào)用目標(biāo)的簽名不匹配,這是因?yàn)樵?AppModule 中,LoggerService 的配置方式是:

{
 provide: LoggerService, 
 useFactory: () => {
 return new LoggerService(true);
}

而此時(shí) LoggerService 構(gòu)造函數(shù)輸入?yún)?shù)的個(gè)數(shù)為兩個(gè),因此會(huì)拋出上面的異常。那么我們應(yīng)該怎么解決這個(gè)問(wèn)題呢?這時(shí)我們就要利用 FactoryProvider 接口中定義的 deps 屬性,來(lái)聲明 LoggerService 所依賴的對(duì)象。

配置 deps 屬性

{
 provide: LoggerService, 
 useFactory: (consoleService) => {
 return new LoggerService(true, consoleService);
 },
 deps: [ConsoleService]
}

更新 AppModule

@NgModule({
 ...,
 providers: [
 HeroService,
 ConsoleService,
 {
 provide: LoggerService, 
 useFactory: (consoleService) => {
 return new LoggerService(true, consoleService);
 },
 deps: [ConsoleService]
 }
 ],
 bootstrap: [AppComponent]
})
export class AppModule { }

當(dāng)更新完代碼,然后再來(lái)一個(gè)華麗的保存操作,最后打開(kāi)你的控制臺(tái),你又看到預(yù)期的輸出信息:

LoggerService: Fetching heros...

我有話說(shuō)

工廠函數(shù)是用來(lái)干嘛的?

在現(xiàn)實(shí)生活中,工廠是用來(lái)生產(chǎn)產(chǎn)品的,如鞋子工廠用來(lái)生產(chǎn)鞋子。而 FactoryProvider 接口中 useFactory 屬性對(duì)應(yīng)的工廠函數(shù)就是用來(lái)創(chuàng)建依賴對(duì)象。此外生產(chǎn)一雙鞋子也需要對(duì)應(yīng)的材料,如鞋底、鞋帶等,而創(chuàng)建依賴對(duì)象也可能需要依賴其它對(duì)象,因此 FactoryProvider 接口中定義了 deps 屬性用來(lái)聲明依賴對(duì)象列表。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者使用Angular 4能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • AngularJS ng-bind-html 指令詳解及實(shí)例代碼

    AngularJS ng-bind-html 指令詳解及實(shí)例代碼

    本文主要是對(duì)AngularJS ng-bind-html 指令知識(shí)的詳細(xì)講解,并附代碼實(shí)例,有需要的小伙伴可以參考下
    2016-07-07
  • AngularJS?的生命周期和基礎(chǔ)語(yǔ)法使用詳解

    AngularJS?的生命周期和基礎(chǔ)語(yǔ)法使用詳解

    當(dāng)你在輸入框中鍵入文本時(shí),這個(gè)文本會(huì)立即反映到?testString?屬性上,反之亦然,如果你在組件類中改變?testString?的值,輸入框的內(nèi)容也會(huì)相應(yīng)更新,這篇文章主要介紹了AngularJS?的生命周期和基礎(chǔ)語(yǔ)法,需要的朋友可以參考下
    2024-05-05
  • AngularJS頁(yè)面訪問(wèn)時(shí)出現(xiàn)頁(yè)面閃爍問(wèn)題的解決

    AngularJS頁(yè)面訪問(wèn)時(shí)出現(xiàn)頁(yè)面閃爍問(wèn)題的解決

    這篇文章主要介紹了AngularJS框架使用中出現(xiàn)頁(yè)面閃爍問(wèn)題的解決方法,閃爍問(wèn)題一般是初始化未加載完畢造成的,需要的朋友可以參考下
    2016-03-03
  • 淺談Angular的12個(gè)經(jīng)典問(wèn)題

    淺談Angular的12個(gè)經(jīng)典問(wèn)題

    Angular作為目前最為流行的前端框架,受到了前端開(kāi)發(fā)者的普遍歡迎。不論是初學(xué)Angular的新手,還是有一定Angular開(kāi)發(fā)經(jīng)驗(yàn)的開(kāi)發(fā)者,了解本文中的12個(gè)經(jīng)典面試問(wèn)題,都將會(huì)是一個(gè)深入了解和學(xué)習(xí)Angular2的知識(shí)概念的絕佳途徑。
    2021-05-05
  • AngularJS Module方法詳解

    AngularJS Module方法詳解

    AngularJS中的Module類負(fù)責(zé)定義應(yīng)用如何啟動(dòng),它還可以通過(guò)聲明的方式定義應(yīng)用中的各個(gè)片段。我們來(lái)看看它是如何實(shí)現(xiàn)這些功能的
    2015-12-12
  • 淺談Angular2 模塊懶加載的方法

    淺談Angular2 模塊懶加載的方法

    本篇文章主要介紹了淺談Angular2 模塊懶加載的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Angular 封裝并發(fā)布組件的方法示例

    Angular 封裝并發(fā)布組件的方法示例

    本篇文章主要介紹了Angular 封裝并發(fā)布組件的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn)

    詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn)

    本篇文章主要介紹了詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • angular內(nèi)容投影詳解

    angular內(nèi)容投影詳解

    這篇文章主要為大家介紹了angular內(nèi)容投影,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 淺談AngularJs指令之scope屬性詳解

    淺談AngularJs指令之scope屬性詳解

    下面小編就為大家?guī)?lái)一篇淺談AngularJs指令之scope屬性詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10

最新評(píng)論

梧州市| 滦南县| 青海省| 景洪市| 澄迈县| 高青县| 汶上县| 靖边县| 和政县| 车致| 三门峡市| 哈尔滨市| 杭州市| 永和县| 武汉市| 寿阳县| 鄯善县| 正蓝旗| 临汾市| 财经| 南丰县| 宝兴县| 灵川县| 常州市| 于田县| 蕉岭县| 巩义市| 澳门| 大姚县| 连州市| 蕲春县| 喜德县| 通河县| 湖州市| 鄂州市| 兴国县| 涞源县| 武汉市| 孙吴县| 安顺市| 青冈县|