Angular服務是一個由服務工廠建立的單例物件。這些服務工廠是由 service provider 依次建立的。而service providers是建構函式。它們必須包含一個$get屬性用於在例項化的時候返回服務工廠。
當你請求一個服務,$injector負責找到正確的service provider,然後將它例項化得到service factory,並呼叫service factory的 $get 方法來得到服務的例項。
- provider(provider) - 使用$injector來註冊一個 service provider 。
- constant(obj) - 註冊一個只有providers 和 services 可以訪問的 值或物件。
- value(obj) - 註冊一個只有services 可以訪問的 值或物件。
- factory(fn) - 註冊一個 service factory 方法,該方法被包裹在 provider 物件當中,並通過
$get
屬性來返回這個 factory 方法。 - service(class) - 註冊一個構造方法,它是一個被包裹在 service provider 物件中的類,然後通過
$get
屬性來使用該構造方法例項化一個新的物件。
provider(name, provider);
引數 | 型別 | 詳細 |
---|---|---|
name | string |
例項(也就是service factory)名稱。記住:它的 provider 需要通過 |
provider | Object/function() |
如果這個 provider 是:
|
factory(name, $getFn);
註冊一個service factory,它用於返回一個service 的例項。這是一個註冊service factory的簡單的寫法,因為它的provider 僅僅包含一個 $get 屬性。如果你不需要在provider中配置你的 service ,那你可以使用它。
引數 | 型別 | 詳細 |
---|---|---|
name | string |
例項的名稱 |
$getFn | function() |
建立例項的$get方法。 本質來說這是一個 |
service(name, constructor);
註冊一個構造方法, 它會通過new方法來建立service例項。 這也是一個$provide.provider(name, {$get: $getFn})的簡寫法,但這裡$getFn是一個建構函式,然後通過new來返回服務的例項。
如果你將你的服務定義為一個type或class,你應該使用$provide.service(class)。
value(name, value);
通過 $injector 註冊一個value service,它可以是一個字串、數值、陣列、物件或者方法。該值實際上也是通過它的provider的$get屬性,一個沒有引數的方法來返回的value service。
它跟constant services很像,但不同點在於他們不能被注入到模組的配置方法中。