2014-09-05 47 views
1

很久以後,我開始重新認識角度,並且(到目前爲止)我發現了兩種創建角度服務的方法。最簡單的是這樣的:創建服務時,angular.Module.factory和angular.Module.service有什麼區別?

var app = angular.Module("SomeApp", []) 
       .factory("SomeService", function ($log) { 
        $log.info("Yea beh beh! Dis hea is a service!") 
       }); 

創建在角的服務的這種形式中angular.Module.factory被記錄。但是,您也可以看到,在同一頁面上有另一種創建服務的方式,使用angular.Module.service

閱讀這兩份說明,我無法理解比.service需要你明確地使用new實例化服務等的差異,而.factory暗示會爲你。我可能在這裏錯了,因爲我無法理解,因爲我不知道$get屬性是什麼。所以,總結:

  • 什麼是$get屬性?
  • .service.factory有什麼區別?

最後,因爲這個錯誤我:

  • 與所有angular.Module.{service, factory, controller},第二個參數是一個function。但是,例如,您已經爲controller中的第二個參數列出了一個列表,並命名它的依賴關係。那麼爲什麼類型是function,而不是object?我的意思是你不會從文檔中知道你可以在列表中聲明依賴關係,除非你已經完成了一個教程或其他東西。
+1

的可能重複[Angular.js:服務提供商VS VS工廠(http://stackoverflow.com/questions/15666048/angular-js-service-vs-provider-vs-factory) – 2014-09-05 06:40:47

回答

1

兩個angular.Module.factoryangular.Module.service是代理來angular.Module.provide。當您給angular.Module.factory函數時,角將通過調用函數並使用其返回值作爲服務創建相應的服務。另一方面,當您給angular.Module.service函數時,angular會將其視爲構造函數,並使用new關鍵字調用它以創建該服務。

因此產生具有angular.Module.factory服務看起來是這樣的:

app.factory('MySimpleService', function() { 
    return { 
     aServiceProperty : 'a property containing a string' 
    }; 
}); 

,創造與angular.Module.service類似的服務是這樣的:

app.service('MyOtherSimpleService', function() { 
    this.aServiceProperty = 'a property containing a string'; 
}); 
+0

在哪上下文會用在另一個上面。對我來說,感覺好像我幾乎總是在'.service'上使用'.factory'。 – 2014-09-05 23:29:32

+0

通常,我使用'.factory'來創建一個構造函數(通過返回一個函數)和'。服務「來創建單例對象(通過將屬性和方法寫入'this',或者返回構造函數的實例) – 2014-09-08 08:36:22

+0

我沒有看到任何一個優勢。我認爲這應該是你應該在團隊中定義的一種慣例。我經常使用他們作爲@SpencerAlger建議。 – Nikolas 2014-09-08 08:42:07

0
  1. 的$得到屬性格式可以定義找到here
  2. 看起來這個問題已經被asked and answered。我無法發表評論,所以我發佈了一個答案。
相關問題