ngInject在下面的代码中做了什么?

时间:2017-10-04 04:23:38

标签: angularjs

AngularJS控制器代码:

function AuthConfig($stateProvider, $httpProvider) {
  'ngInject';

  // Define the routes
  $stateProvider

  .state('app.login', {
    url: '/login',
    templateUrl: 'auth/auth.html',
    title: 'Sign in'
  })

  .state('app.register', {
    url: '/register',
    templateUrl: 'auth/auth.html',
    title: 'Sign up'
  });

};

export default AuthConfig;

我无法弄清楚ngInject的用途。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:20)

'ngInject';本身没有任何作用,它只是一个字符串文字。一个名为ng-annotate的工具将它用作标志:如果一个函数以'ngInject';开头,它将由ng-annotate处理。

基本上,ng-annotate将转换

angular.module("MyMod").controller("MyCtrl", function($scope, $timeout) {
    "ngInject";
    ...
});

angular.module("MyMod").controller("MyCtrl", ["$scope", "$timeout", function($scope, $timeout) {
    "ngInject";
    ...
}]);

为了使代码缩小安全。

如果你没有使用ng-annotate,你可以安全地忽略或删除表达式。但要注意,如果项目使用ng-annotate,你可能会破坏项目的构建过程。 有关ng-annotate及其功能的更多信息,请参阅https://github.com/olov/ng-annotate

答案 1 :(得分:2)

在生产中部署后,通常需要ngInject才能使应用程序在缩小时工作。如果删除它并使用优化版本,则应该失败。

详细了解 AngularJs Minification and Annotation