2013-10-24 37 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