2013-10-24 75 views
1

我的服務在兩種情況下均按預期工作,但我不明白這兩種語法之間的區別。請賜教。官方文件對這一點不是很明確。用於定義自定義服務的語法

語法答:

service.factory('Alert',['$rootScope', '$timeout', function($rootScope, $timeout) { 
    //Do stuff 
}]); 

語法B:

service.factory('Alert', function($rootScope, $timeout) { 
//Do stuff 
}); 
+1

看那[依賴注入(DI)(HTTP: //docs.angularjs.org/guide/di)文檔。特別是* Inline Annotation *小節和*我在哪裏可以使用DI?*部分 – Alexander

回答

4

它們都提供相同的功能,但Syntax A(內嵌括號標記)允許通過一個JavaScript minifier被精縮代碼。由於Syntax ASyntax B稍長(並且違反了DRY原則),因此您希望使用它的最合適且可能唯一的情況是您希望縮減代碼的時間。

由於角度推斷控制器的依賴從 參數名稱控制器的構造函數,如果你要 壓縮JavaScript代碼[中] PhoneListCtrl控制器,它所有的 函數參數將精縮爲以及依賴關係注入器將無法正確識別服務。

See this page for more information (A Note on Minification)

0

我也發現了文檔中的第三種語言。這似乎是比「句法結構」(排列標記)更合適的,兼容的JavaScript minifier:

var service = angular.module('alertService', []); 
var alertServiceFactory = function($rootScope, $timeout) { 
//Do stuff 
}); 
alertServiceFactory.$inject = ['$rootScope', '$timeout']; 
service.factory('Alert', alertServiceFactory); 

此處瞭解詳情:http://docs.angularjs.org/guide/dev_guide.services.managing_dependencies