我的服务在这两种情况下都按预期工作,但我不明白这两种语法之间的区别。请启发我。官方文档对这一点不是很明确。
语法 A:
service.factory('Alert',['$rootScope', '$timeout', function($rootScope, $timeout) {
//Do stuff
}]);
语法 B:
service.factory('Alert', function($rootScope, $timeout) {
//Do stuff
});
我的服务在这两种情况下都按预期工作,但我不明白这两种语法之间的区别。请启发我。官方文档对这一点不是很明确。
语法 A:
service.factory('Alert',['$rootScope', '$timeout', function($rootScope, $timeout) {
//Do stuff
}]);
语法 B:
service.factory('Alert', function($rootScope, $timeout) {
//Do stuff
});
它们都提供相同的功能,但Syntax A
(内联括号表示法)允许您的代码通过 JavaScript 缩小器缩小。因为比 DRYSyntax A
长一点Syntax B
(并且违反了 DRY 原则),所以您想要使用它的最合适且可能唯一的情况是在您想要缩小代码时。
由于 Angular 从控制器构造函数的参数名称中推断出控制器的依赖关系,如果你要缩小 [the] PhoneListCtrl 控制器的 JavaScript 代码,它的所有函数参数也会被缩小,并且依赖注入器不会能够正确识别服务。
我还在文档中找到了第三种语法。它似乎比“语法 A”(数组表示法)更合适,并且与 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