早上開車上班, 發現車快沒油了, 因而拐進加油站. 有一輛出租車也在加油..
Angular service在一個應用裏是以單例形式存在的. 這個單例的實例是由service factory(service工廠)建立的.
- 加油, 就比如是一個 Angular service;
- 不管是我加的油, 仍是出租車加的油, 都是從這個加油站同一個地下油罐取出來的一樣的汽油. 你們使用的都是同一個汽油實例(單例);
- 個人車與出租車共享了加的汽油的屬性, 好比: 都是93#汽油, 摻水的比例, ...
所以, 在Angular裏, 以下狀況會考慮使用service:
- 可重用的, 純業務邏輯的代碼, 與$scope無關的代碼能夠被寫成service. DRY.
- 用service共享數據, 由於在應用中, 對service的依賴都是引用同一個service實例
- ...
------
開頭寫到 service 是由 service factory(是一個函數) 所建立, service factory 就比如上圖的那2個油桶.
在Angular體系中, service factory 又是由 service provider(是構造函數) 所建立, service provider 就比如這個加油站.
設想若是加油站很大, 必須有一個指路牌, 標識出在哪兒加93#汽油. service provider 函數必須包含名爲
$get
的屬性, 它指向 service factory 函數. 就比如,
$get
這個路標指示咱們在哪兒找到93#加油點.
Angular 提供了5個建立service的方法, 由繁到簡, 或具備特殊功能
- .provider(provider)
- .constant(obj)
- .value(obj)
- .factory(fn)
- .service(class)
主要相比較的爲 provider(), factory(), service() 3個函數.
用它們定義service時, 寫法各不相同.
最終實例化的方式也不一樣.
provider() 比如整個加油站, 可配置性強, 程序員能夠盡情發揮..
factory(), service() 次之, 哪裏須要哪裏搬, 定義簡單,
----
var provider = function() {
this.$get = function factory() {
}
}