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

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

}]);

これら 2 つのディレクティブ パターンの違いは何ですか?

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

2 つの違いは、[]ミニファイヤは文字列をミニファイしないため、ブラケット表記はミニファイヤに対して安全であることです。たとえば、javascript なしで縮小しようとすると、次のようになります。

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

の中へ

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

この場合の問題は、Angular が知っているeとは対照的に$scope、Angular が何も知らないということです。[]ブラケット表記を使用して$injector、コントローラーに何をアクセスさせたいかを事前に伝えることができます。ミニファイヤは文字列をミニファイしない (できない) ため、ミニファイヤの有無にかかわらず、Angularの依存性注入機能を安全に使用できます。

構文の違いをより深く理解するには、ng-book ( https://www.ng-book.com/ ) を参照してください。免責事項、私はこの本とhttp://www.ng-newsletter.com/の著者です。

于 2013-12-24T18:17:33.647 に答える