6
angular.directive('ppd:reset', function(e1,e2) {
    return function(linkElement) {      
        linkElement.wrap()....
        });
    };
});

angular.directive('ppd:reset', [function() {
        return function(scope, elm, attrs) {   } 

}]);

这两个指令模式有什么区别?

4

3 回答 3

17

如果您使用括号符号声明您的工厂,您可以在缩小代码时避免出现问题:

angular.directive('ppd:reset', ["$compile", function(compile) {
    return function(scope, elm, attrs) {   } 

}]);

注入器查看您的函数参数名称以知道要注入什么。如果缩小过程重命名这些,注入器不知道该做什么了。缩小当然不会触及字符串值,这就是数组表示法工作正常的原因。

于 2013-02-04T15:16:22.693 回答
4

不同之处在于版本 #1 是 Angular 支持编写不需要任何可注入模块的指令的一种简单方式。版本 #2 用于注射剂。因此,假设您的指令依赖于 $timeout 服务,那么您将有如下定义。对我来说,即使没有注射剂,也更容易不去思考而只使用数组语法。

angular.directive('ppd:reset', ['$timeout', function($timeout) { 
       return function(scope, elm, attrs) {   } 
}]);  
于 2012-08-12T04:34:00.070 回答
0

两者之间的区别在于[]括号表示法是缩小器安全的,因为缩小器不会缩小字符串。例如,如果你尝试在没有它的情况下缩小 javascript,它会变成:

angular.module('myApp', [])
.controller('MainController', function($scope) {
});

进入

angular.module("myApp",[]).controller("MainController",function(e){})

在这种情况下,问题在于 Angular 不知道与它e相反的东西$scope,它确实知道。使用[]括号符号,我们可以$injector提前告诉控制器我们希望控制器访问什么。由于压缩器不会(也不能)压缩字符串,因此无论是否使用压缩器,使用Angular的依赖注入功能都是一种安全的方法。

要更深入地了解语法差异,您可以查看 ng-book ( https://www.ng-book.com/ )。免责声明,我是本书和http://www.ng-newsletter.com/的作者。

于 2013-12-24T18:17:33.647 回答