Angular Service和Fatory的差異

2021-07-16 02:27:17 字數 1928 閱讀 3983

學習angularjs的過程中,必不可少地需要使用servicefactory進行輔助開發,他們是angular di系統(dependency injection)中的重要成員,而他們有什麼區別呢?我想大多數人都被告知他們差不多,相同的功能使用servicefactory都可以實現,但事實並非如此。通過他們實現某些特定的功能相信對於開發人員並不困難,但了解他們之間具體的差異就需要費一些功夫了。

先看下service的特點,angular通過.service()方法宣告乙個service,如:

function

balaservice

($log) }

然後我們就可以在需要使用此service的地方(通常在controller中)將其作為依賴注入,如:

.controller('balactrl', ['balaservice', function

(balaservice) ]);

上面對於service的使用方式相信大家都非常熟悉,那麼什麼是service?service只是乙個function,在應用中充當了業務層的角色,注意他僅僅是乙個function,和其他js中的function無任何區別,唯一需要注意的一點是service的單例性。

當你想將封裝的功能暴露給其他模組使用時,就可以使用service暴露方法作為公共api使用,就像上面的例子中那樣,使用service很簡單明瞭。

再來看下factory,首先宣告方式肯定不同於service,angular使用.factory()方法宣告乙個factory,前文也說到通常情況下service和factory都能完成某項特定的需求,如很容易使用factory來改寫上文的balaservice

function

balaservice

($log) ;

saybala: function

(msg) }

但是factory並不只是service的另一種實現方式而已,實際上factory的功能包含了service的功能,即factory要更加靈活和強大。看起來使用factory也僅僅只是返回了乙個object字面量而已,而且實現起來比service更加繁瑣,但其實factory可以返回任何東西,返回object字面量只是最通常的情形,對特定需求來說,開發者可以返回函式、函式閉包,甚至只返回字串這種簡單資料型別的資料,具體如何操作,要根據需求而定。

上面展示了在factory中返回object字面量的例子,下面我們通過factory返回閉包:

function

balaservice

($log) ;}

這樣,我們就可以在需要使用此factory的地方(通常是在controller中)以類似於下面的方式進行使用了:

(balaservice) ]);

想必大家對於建立自定義物件的方式不會陌生,結合使用建構函式和原型建立自定義物件是最常用的方式:通過建構函式定義例項屬性以避免不同物件例項操作對屬性可能產生的影響,通過原型的方式定義方法和共享的屬性,以達到方法共享的目的。這些操作也可以放在factory進行:

function

personservice

($log)

person.prototype.sayperson = function

() ;

return person;}

這樣,我們就可以在需要使用此factory的地方(通常是在controller中)以類似於下面的方式進行使用:

(personservice) ]);

可以看到,factory的功能非常強大,其「返回一切」的特性給開發帶來了無窮多的可能性,而service只是其中一小部分功能而已。但是需要注意的是不管factory還是service都是單例的。

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...

if和switch和for語句

if和switch很像。具體什麼場景下,應用那個語句呢?如果判斷的具體數值不多,而是符合byte,short,int,char,字串。這五種型別。雖然兩個語句都可以使用,建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型別判斷,使用if,if的使用範圍更廣。whi...