angular.directive('ppd:reset', function(e1,e2) {
return function(linkElement) {
linkElement.wrap()....
});
};
});
并且
angular.directive('ppd:reset', [function() {
return function(scope, elm, attrs) { }
}]);
这两个指令模式有什么区别?
答案 0 :(得分:17)
如果使用括号表示法声明工厂,则可以在缩小代码时避免出现问题:
angular.directive('ppd:reset', ["$compile", function(compile) {
return function(scope, elm, attrs) { }
}]);
注射器会查看您的函数参数名称,以便了解要注入的内容。如果缩小过程重命名,那么注射器不知道该怎么做。缩小当然不会触及字符串值,这就是数组表示法工作正常的原因。
答案 1 :(得分:4)
不同之处在于版本#1是一种简单的方式,angular支持编写不需要任何可注入模块的指令。版本#2用于注射。所以,假设您的指令依赖于$ timeout服务,那么您将得到如下定义。对我来说,即使没有注射剂,它也更容易思考并且只使用数组语法。
angular.directive('ppd:reset', ['$timeout', function($timeout) {
return function(scope, elm, attrs) { }
}]);
答案 2 :(得分:0)
两者之间的区别在于[]
括号表示法是minifier安全的,因为minifiers不会缩小字符串。例如,如果您尝试在没有它的情况下缩小javascript,它将转为:
angular.module('myApp', [])
.controller('MainController', function($scope) {
});
到
angular.module("myApp",[]).controller("MainController",function(e){})
在这种情况下的问题是Angular不知道关于e
而不是$scope
的事情,它确实知道。使用[]
括号表示法,我们可以提前告诉$injector
我们希望控制器获取访问权限的内容。由于minifiers不会(也不能)缩小字符串,因此使用Angular的依赖注入功能是一种安全的方法,可以使用或不使用minifiers。
为了更深入地了解语法的差异,您可以查看ng-book(https://www.ng-book.com/)。免责声明,我是本书和http://www.ng-newsletter.com/的作者。