使用AngularJS进行依赖注入注释的最佳实践是什么?

时间:2014-09-30 12:45:25

标签: angularjs dependency-injection ng-annotate

所以感谢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'
    ];
   }]);

后一种明确的依赖声明似乎是常态,但是在这一点上继续使用它有什么优点或理由吗?

3 个答案:

答案 0 :(得分:4)

这取决于你的项目。如果您正在为项目使用ngAnnotate - 并且它适用于您的所有DI案例 - 请使用它。请确保您的所有开发人员遵循此惯例。请注意,ngAnnotate或类似工具是缩小的必要条件。

通常,使用内联注释似乎是首选,因为它不依赖于像ngAnnotate这样的构建工具。但是没有理由使用ngAnnotate不起作用。

还有第三种选择

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);

答案 1 :(得分:0)

正确的表格:

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

因为如果你想在生产时连接和缩小你的代码,控制器函数中的 $ scope 参数将转换为param a ,而Angular找不到$ scope provider。如果您使用此表单,提供者和服务存储为字符串,您可以编写类似.controller('YeoCtrl', ['$scope', function(a){a.awesomeThing = [...]}]

的内容

在这里阅读更多内容:

Angular Depency Injection

答案 2 :(得分:0)

使用数组表示法没有任何好处。编写数组符号只会增加错误的可能性。为了简洁,请始终使用简写版本,并在您看到的任何地方进行评论。正如您所说,使用ng-annotate(和ng-min prior)为您创建数组符号。如果您正在缩小代码,那么您将使用任务运行器,因此可以使用ng-annotate。 "正确的形式:"不建议在下面。

第一种是优选的,即:

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