2014-10-30 63 views
3

我知道這已經被問了很多次了(其實很多!),但是我仍然無法完全理解這兩者之間的區別是什麼。爲什麼我應該選擇在AngularJS中使用工廠服務?

我知道一個服務返回所提供的功能的單一實例,以及一個工廠將簡單地調用這個函數返回其值。

但是......

在我看來,你可以做,並實現使用一種或另一種相同的效果,所以我應該如何選擇使用哪一個?爲什麼我應該選擇服務超過工廠,或以其他方式?

有沒有這樣一種情況,一個人可以做一些其他人不能做的事情?

+0

我意識到在那裏陳述的不同,然而我所問的不是* how *,而是* why。爲什麼我應該選擇一個呢?編輯問題的標題,以避免可能的困惑 – 2014-10-30 13:42:25

+0

所有的服務,提供和工廠是單身人士,你可以瞭解每個人的基本知識,然後決定什麼是最適合你的解決方案,這裏沒有人適合這裏 – 2014-10-30 13:44:38

+0

問題是我理解基本的區別,但我不能看到一個可能的情況,當一個人可以做一些其他人不能做的事時。考慮到這一點,我總是可以堅持一種方法,而不要使用另一種方法。這不是我想要的。 – 2014-10-30 13:46:35

回答

3

簡而言之

如果你想讓你的函數像普通函數一樣被調用,請使用factory。如果你希望你的函數被新運算符實例化,請使用service。如果你不知道其中的差別,使用廠家

來源:

網址:http://iffycan.blogspot.in/2013/05/angular-service-or-factory.html

詳解

當您使用的服務,您聲明變量和函數將原型將新的對象和對象返回給你。在工廠中,它將按照原樣返回功能。

比方說,您創建了一個服務,10個功能,當你把它作爲依賴,新的對象將被創建,所有功能將被原型,檢查例如

function Gandalf() { 
    this.color = 'grey'; 
} 

Gandalf.prototype.comeBack = function() { 
    this.color = 'white'; 
} 

下面的「這」將被退回。性能問題在這裏可以忽略不計。

+0

必須有一些我在這裏失蹤,但我仍然不明白爲什麼我會選擇使用服務或工廠。工廠的函數也可以返回一個對象:'function(){var color ='gray'; return {comeBack:function(){color ='white'; }}; }' – 2014-10-30 13:40:03

+1

他選擇了一個服務,因爲他正在爲它提供一個原型,一個新的對象。在TypeScript,CoffeeScript或ES6中,這將是一個類。它是一個用new關鍵字實例化的對象。 – Martin 2014-10-30 14:09:35