欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Angular 4依賴注入學習教程之ClassProvider的使用(三)

 更新時間:2017年06月04日 09:25:55   作者:semlinker  
這篇文章主要給大家介紹了關于Angular 4依賴注入之ClassProvider使用的相關資料,文中介紹的非常詳細,對大家學習或者使用Angular 4具有一定的參考學習價值,需要的朋友可以參考借鑒,下面來一起看看吧。

學習目錄

前言

本文屬于Angular 4依賴注入學習系列文章的第三篇,主要給大家介紹了Angular 4依賴注入之ClassProvider使用的相關內(nèi)容,分享出來供大家參考學習,下面來看看詳細的介紹:

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

基礎知識

Provider 的作用

Angular 中我們通過 Provider 來描述與 Token 相關聯(lián)的依賴對象的創(chuàng)建方式。在 Angular 中依賴對象的創(chuàng)建方式分為以下四種:

  • useClass
  • useValue
  • useExisting
  • useFactory


(圖一:注入器、Provider與依賴對象關系)

Provider 的分類

在 Angular 中 Provider 主要分為:

  • TypeProvider
  • ClassProvider
  • ValueProvider
  • ExistingProvider
  • FactoryProvider

ClassProvider

ClassProvider 接口定義

export interface ClassProvider {
 // 用于設置與依賴對象關聯(lián)的Token值,Token值可能是Type、InjectionToken、
 // OpaqueToken的實例或字符串
 provide: any; 
 useClass: Type<any>;
 // 用于標識是否multiple providers,若是multiple類型,則返回與Token關聯(lián)的依賴
 // 對象列表
 multi?: boolean; 
}

看完上面的接口定義,相信一些讀者會覺得陌生。在本系列教程第二小節(jié)中,我們用到了 TypeProvider。

不信你往下看:

@NgModule({
 ...
 providers: [HeroService], // 方式一
 bootstrap: [AppComponent]
})
export class AppModule { }

// TypeProvider接口
export interface TypeProvider extends Type<any> {}

那跟 ClassProvider 有什么關系?先不急,請你繼續(xù)往下看:

@NgModule({
 ...
 providers: [{
 provide: HeroService, useClass: HeroService // 方式二
 }],
 bootstrap: [AppComponent]
})
export class AppModule { }

是不是終于看到了 useClass 。其實上面兩種方式是等價的,方式一更加簡潔,方式二是采用標準的語法哈。那么問題來了,什么時候要使用 useClass 語法?回答這個問題前,我們先看個需求。

假設由于業(yè)務需要,先前我們定義的 HeroService 的數(shù)據(jù),需要從服務器獲取,而不是使用靜態(tài)數(shù)據(jù)。項目采用前后端分離的開發(fā)方式進行開發(fā),此外在項目開發(fā)前已經(jīng)協(xié)商好數(shù)據(jù)格式,也給出了對應的模擬數(shù)據(jù)(測試數(shù)據(jù))。

那么除了修改原有的 HeroService 服務外,有沒有其它方式可以方便地驗證一下模擬數(shù)據(jù),同時保持較小的改動量哈。其實我們可以創(chuàng)建一個新的數(shù)據(jù)服務,如 MockHeroService ,具體實現(xiàn)如下:

創(chuàng)建 MockHeroService 服務

export class MockHeroService {
 heros: Array<{ id: number; name: string }> = [
 { id: 16, name: 'RubberMan' },
 { id: 17, name: 'Dynama' },
 { id: 18, name: 'Dr IQ' },
 { id: 19, name: 'Magma' },
 { id: 20, name: 'Tornado' }
 ];

 getHeros() {
 return this.heros;
 }
}

使用 MockHeroService 服務

@NgModule({
 ...
 providers: [{
 provide: HeroService, useClass: MockHeroService
 }],
 bootstrap: [AppComponent]
})
export class AppModule { }

更新完相關的代碼,正常情況下,在 http://localhost:4200/ 頁面,你將看到以下的內(nèi)容:

ID: 16 - Name: RubberMan
ID: 17 - Name: Dynama
ID: 18 - Name: Dr IQ
ID: 19 - Name: Magma
ID: 20 - Name: Tornado

其實服務命名為 MockHeroService 的目的,也是為了說明依賴注入的好處,即易于進行本地單元測試。此外假設沒有利用 Angular 依賴注入的特性,我們需要修改應用中每個應用到 HeroService 的地方。

我有話說

ClassProvider 接口中的 Type 類型是什么?

export interface Type<T> extends Function { new (...args: any[]): T; }

export function isType(v: any): v is Type<any> {
 return typeof v === 'function';
}

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • AngularJS中的表單簡單入門

    AngularJS中的表單簡單入門

    本文主要介紹AngularJS 表單,這里對AngularJS 表單知識做了詳細整理介紹,希望能幫助有需要的小伙伴
    2016-07-07
  • protractor的安裝與基本使用教程

    protractor的安裝與基本使用教程

    這篇文章主要給大家介紹了關于protractor安裝與基本使用的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • angularjs自定義過濾器demo示例

    angularjs自定義過濾器demo示例

    這篇文章主要介紹了angularjs自定義過濾器,結合完整實例形式分析了angularjs自定義過濾器相關原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-08-08
  • AngularJS使用ocLazyLoad實現(xiàn)js延遲加載

    AngularJS使用ocLazyLoad實現(xiàn)js延遲加載

    這篇文章主要介紹了AngularJS使用ocLazyLoad實現(xiàn)js延遲加載的相關資料,需要的朋友可以參考下
    2017-07-07
  • AngularJS中重新加載當前路由頁面的方法

    AngularJS中重新加載當前路由頁面的方法

    下面小編就為大家分享一篇AngularJS中重新加載當前路由頁面的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • angular4 獲取wifi列表中文顯示亂碼問題的解決

    angular4 獲取wifi列表中文顯示亂碼問題的解決

    這篇文章主要介紹了angular4 獲取wifi列表中文顯示亂碼問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Angularjs中的$apply及優(yōu)化使用詳解

    Angularjs中的$apply及優(yōu)化使用詳解

    angular js的雙向數(shù)據(jù)綁定,在開發(fā)中起到的作用灰常大,所以下面這篇文章主要給大家介紹了關于Angularjs中$apply及優(yōu)化使用的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-07-07
  • AngularJS表單編輯提交功能實例

    AngularJS表單編輯提交功能實例

    這篇文章主要介紹了AngularJS表單編輯提交功能實例,本文講解如何修改表單的默認值,需要的朋友可以參考下
    2015-02-02
  • Angular.Js之Scope作用域的學習教程

    Angular.Js之Scope作用域的學習教程

    這篇文章主要給大家分享了關于Angular.Js之Scope作用域的學習教程 ,文中通過多個示例代碼介紹的非常詳細,相信對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • 詳解Monaco?Editor中的Keybinding機制

    詳解Monaco?Editor中的Keybinding機制

    這篇文章主要為大家介紹了詳解Monaco?Editor中的Keybinding機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論