2015-10-01 14 views
0

我正在學習AngularJS的提供者,但我是AngularJS的初學者,在JavaScript方面經驗不足。
我一直在尋找在AngularStrap代碼,發現模式提供商(SRC \模式\ modal.js)返回一個函數,而不是一個對象:AngularJS Providers

this.$get = function($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) { 

    ... 

    return ModalFactory; 
}; 

爲什麼函數返回,而不是具體的對象。
以我的理解,在這種情況下,服務不能像單身人士那樣行事,如果我錯了,請糾正我。

回答

1

角服務實例可以是anything(除了service服務,因爲它使用構造函數與new創建一個對象)。

$get返回的值在服務首次被注入時被保存爲服務實例。這個實例在同一應用程序中的所有後續依賴注入期間返回,$get將不會再次調用,這就是服務爲單例的原因。

1

因爲工廠只是返回對象的函數。

形式angularJS代碼:

function factory(name, factoryFn) { 
    return provider(name, { $get: factoryFn }); //<------ juste called, not newed. 
} 

function service(name, constructor) { 
    return factory(name, ['$injector', function($injector) { 
     return $injector.instantiate(constructor); 
    }]); 
} 
+0

但在這種情況下,如果我在我的控制器注入$模態,例如,它不會是一個對象,否則將返回一個對象,如果我調用$模態(參數),但不是服務suposed是單身物體? –

+0

@MarcoPrado'$ modal'函數本身是一個單例,而不是它返回的值。注入到一個地方的'$ modal'依賴將會被'==='等同於其他應用部分注入的'$ modal'依賴。做'$ modal.fnProperty = ...'一次會導致'$ modal'函數在其他地方擁有這個屬性。 – estus

+0

@estus現在很明顯,我認爲服務應該用作單個對象本身,而不是實例化新的對象。謝謝 –

相關問題