1

ng-annotate のおかげで、次のようにコードを正常に縮小できるようになりました。

angular.module('YeomanApp')
  .controller('YeoCtrl', function ($scope) {
   $scope.awesomeThings = [
     'HTML5 Boilerplate',
     'AngularJS',
     'Karma'
    ];
   });

このフォームよりもこのフォームに利点はありますか:

angular.module('YeomanApp')
  .controller('YeoCtrl', ['$scope', function ($scope) {
   $scope.awesomeThings = [
     'HTML5 Boilerplate',
     'AngularJS',
     'Karma'
    ];
   }]);

後者の明示的な依存関係宣言が標準のようですが、現時点でそれを使い続ける利点や理由はありますか?

4

3 に答える 3

4

それはプロジェクトによって異なります。プロジェクトに ngAnnotate を使用している場合、そしてそれがすべての DI ケースで機能する場合は、それを使用してください。すべての開発者がこの規則に従っていることを確認してください。縮小には ngAnnotate または同様のツールが必要であることに注意してください。

一般に、ngAnnotate のようなビルド ツールに依存しないため、インライン アノテーションの使用が好まれるようです。しかし、ngAnnotate の使用が機能しない理由はありません。

3番目のオプションもあります

MyCtrl = function($scope) {
  $scope.awecomeThings = [...];  
} 
MyCtrl.$inject = ['$scope'];

angular.module('YourApp').controller('MyCTrl', MyCtrl);

TypeScript を使用している場合、これは非常に見栄えがします (CoffeeScript も同様でしょうか?)

class MyCtrl {
    static $inject = ['$scope'];
    contructor($scope: any) { // shouldn't use any, but this is just an example
        $scope.awesomeThings = [...];
    }
}

angular.module('YourApp').controller('MyCtrl', MyCtrl);
于 2014-09-30T13:23:09.293 に答える
0

配列表記を使用する利点はありません。配列表記を記述すると、バグの可能性が高まるだけです。簡潔にするために常に省略形を使用し、それ以外の場合はコメントしてください。あなたが言うように、ng-annotate (および以前の ng-min) を使用すると、配列表記が作成されます。100 回中 99 回、コードを縮小している場合は、タスク ランナーを使用することになるため、ng-annotate のみを使用できます。以下の「正しい形式:」は推奨されません。

最初のものが優先されます。つまり、次のようになります。

angular.module('YeomanApp')
    .controller('YeoCtrl', function ($scope) {
        $scope.awesomeThings = [
            'HTML5 Boilerplate',
            'AngularJS',
            'Karma'
        ];
    });
于 2014-09-30T14:30:19.883 に答える
0

正しい形式:

angular.module('YeomanApp')
  .controller('YeoCtrl', ['$scope', function ($scope) {
     $scope.awesomeThings = [
       'HTML5 Boilerplate',
       'AngularJS',
       'Karma'
     ];
}]);

本番環境でコードを連結して縮小したい場合、コントローラー関数の$scope param は param aに変換され、Angular は $scope プロバイダーを見つけることができないためです。このフォームを使用する場合、プロバイダーとサービスのストレージを文字列として使用すると、次のように記述できます.controller('YeoCtrl', ['$scope', function(a){a.awesomeThing = [...]}]

ここでもっと読む:

角度依存性注入

于 2014-09-30T12:58:16.723 に答える