2

我花了幾個小時閱讀服務和工廠之間的差異,在這裏,角度文檔和其他地方,但我仍然不真正瞭解它。AngularJS:一些幫助瞭解服務/工廠

我知道有關於這裏涉及到這個問題已經無數帖子,但是我只是想確保我的理解正確,因爲我現在不是失去了一些東西或者是沒有理由的區別......從什麼我瞭解服務和工廠完全一樣,它們在功能上是相同的,唯一的區別在於體系結構。

如果我們忽略角了一會兒,在香草JS重建這個我在想這是正確的是它們如何工作:

//factory design 
var factoryDesign = function(){ 

    var privateFoobar = 'foobar', 
     reverse = function(){ 
      return privateFoobar 
       .split('') 
       .reverse() 
       .join(''); 
     } 

    return { 
     foobar: privateFoobar, 
     raboof: reverse() 
    } 

}; 

//Service design 
var serviceDesign = function(){ 
    this.foobar = 'foobar'; 
    this.raboof = this.foobar  
     .split('') 
     .reverse() 
     .join(''); 
} 

var myGlobalServiceInstance = new serviceDesign(), 
    myGlobalFactoryInstance = new factoryDesign(); 

console.log('service', myGlobalServiceInstance.foobar, myGlobalServiceInstance.raboof); 

console.log('factory',myGlobalFactoryInstance.foobar,myGlobalFactoryInstance.raboof); 

JSFIDDLE

這兩種情況下會返回但同樣的事情,工廠主要依賴於返回的私有對象以及服務範圍的方法和對象。

如果是這種情況......這一點到底是什麼?是否有任何理由區分工廠......我的服務理解它可以讓你改變的值,如:

myGlobalServiceInstance.foobar = 'newFoobar'; 

但什麼是使用工廠的好處是什麼?如果可能,請提供香草JS任何例子

回答

1

要短:隨着服務的角度提供最新的,功能的實​​例傳遞在這樣: service('myService', function myService(){});相同new myService();

同時用工廠,角度提供了什麼是你在傳遞函數的返回: factory('myFactory', function myFactory(){});是一樣的myFactory();

有出廠

因此,例如,您可以通過自己的類/構造函數,函數的ndefinition並在代碼中的其他地方進行實例化,例如:

factory('myFactory', function(){ 
    var MyClass = function(){}; 

    return MyClass ; 
}); 
+0

工廠是一個單體 - 意味着一個工廠的功能只被角度調用一次,然後你總是得到它返回的同一個對象。 我不知道你的意思是由香草js語法 - 角是香草JS。但要趕上你的代碼,它會更像: 'var myGlobalServiceInstance = new serviceDesign(), myGlobalFactoryInstance = factoryDe​​sign();' – Charminbear 2014-11-03 17:10:01

+0

我不會稱之爲「卡住」,因爲它有時甚至是非常有用的。但是,是的。 ;) – Charminbear 2014-11-03 20:24:02