2012-07-29 79 views
6
angular.directive('ppd:reset', function(e1,e2) { 
    return function(linkElement) {  
     linkElement.wrap().... 
     }); 
    }; 
}); 

而且別樣角指令模式

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

}]); 

是什麼這兩個指令模式之間的區別?

回答

17

如果用括號來聲明你的工廠,你可以涅槃代碼時避免出現問題:

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

}]); 

噴油器看你的函數的參數名稱,以便知道什麼注射。如果縮小過程重命名這些,注射器不知道該做什麼。縮小當然不會觸及字符串值,這就是爲什麼數組表示法可以正常工作。

+2

您可以在DI文檔中找到標題爲「Inline Annotation」的文檔http://docs.angularjs.org/guide/di#inlineannotation – Oliver 2013-06-05 13:37:10

+0

那麼,您還可以使用較少的詳細語法並使用ngMin解析源代碼:) https ://github.com/btford/ngmin – 2013-08-03 09:47:20

4

不同之處在於版本#1是一種簡單的方法,角度支持不需要任何注入模塊的編寫指令。版本#2用於注射劑。因此,假設您的指令依賴於$ timeout服務,那麼您將擁有如下所示的定義。對我來說,即使沒有注射劑,也不會考慮使用數組語法。

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

Angular仍然以兩種形式進行依賴注入。其他答案暗示的區別在於處理縮小。 – markt 2013-02-22 06:44:10

+0

我同意縮小評論,但是,原來的帖子(因爲我讀它)是關於有一個數組與沒有數組。我沒想過提及縮小位。我不明白我的回答是錯的。 – 2013-02-22 19:40:02

+0

你的答案持平說第一個語法是用於編寫不需要注入的指令..但事實並非如此。 Angular會嘗試爲兩者注入依賴關係。 – markt 2013-02-22 23:35:57

0

兩者之間的區別在於[]括號表示法是安全的,因爲限定符不會縮小字符串。例如,如果你試圖縮小JavaScript沒有它,它會變成:

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

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

在這種情況下的問題是,角度不知道關於e的事情,而不是$scope,它確實知道。使用[]括號表示法,我們可以提前告訴$injector我們希望控制器訪問什麼。由於縮小器不會(也不能)縮小字符串,因此使用帶有或不帶縮小器的Angular的依賴項注入功能是一種安全的方法。

爲了深入理解語法的差異,您可以查看ng-book(https://www.ng-book.com/)。免責聲明,我是本書的作者和http://www.ng-newsletter.com/