不同类型的角度指令模式


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

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

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

如果使用括号表示法声明工厂,则可以避免在缩小代码时出现问题:

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

器会查看函数参数名称,以便知道要注入的内容。如果缩小过程重命名这些,则注入器不再知道该怎么做。缩小当然不会触及字符串值,这就是数组符号工作正常的原因。

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

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

两者之间的区别在于[]括号表示法是简化器安全的,因为简化器不会缩小字符串。例如,如果你试图在没有它的情况下缩小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/的作者。

最新更新