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 不起作用。

还有第三种选择

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

正确的形式:

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

因为如果您想在生产中连接和缩小代码,控制器函数中的$scope参数将转换为参数a并且 Angular 找不到 $scope 提供程序。如果你使用这种形式,提供者和服务存储为字符串,你可以写这样的东西.controller('YeoCtrl', ['$scope', function(a){a.awesomeThing = [...]}]

在这里阅读更多:

角度依赖注入

于 2014-09-30T12:58:16.723 回答
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 回答