定义控制器-angularjs

定义控制器-angularjs,angularjs,Angularjs,我是这样做的 方法1: var app = angular.module('MyModule', ['ngDialog']); app.controller('MyController', function ($scope,ngDialog) { /// }); app.controller('MyController', ['$scope', function ($scope) { /// }]); 但我在文章中看到了很多类似下面的内容 方法2: var app = angular.mod

我是这样做的

方法1:

var app = angular.module('MyModule', ['ngDialog']);
app.controller('MyController', function ($scope,ngDialog) {
///
});
app.controller('MyController', ['$scope', function ($scope) {
///
}]);
但我在文章中看到了很多类似下面的内容

方法2:

var app = angular.module('MyModule', ['ngDialog']);
app.controller('MyController', function ($scope,ngDialog) {
///
});
app.controller('MyController', ['$scope', function ($scope) {
///
}]);
请帮助我理解为什么方法2中两次提到$scope。
是方法1,一个好的实践。如果没有,在什么情况下会失败。

方法2用于防止缩小错误。在生产环境中,当您通常缩小JS/CSS文件时,变量的名称会更改以减少字节数并使文件更轻

AngularJS依赖于DI,这意味着它知道根据名称将哪个服务/提供者注入控制器/服务。如果它看到
$httpProvider
,它知道注入
$httpProvider
。一旦发生小型化,命名将从:

app.controller('MyController', function (a,b) { //a, b is the change
///
});
或者类似的东西

使用方法2,将名称指定为字符串,使用这些字符串AngularJS知道注入什么,尽管缩小更改了变量的名称


您可以阅读更多信息。

声明控制器的推荐方法是使用数组表示法:

someModule.controller('MyController', ['$scope', 'dep1', 'dep2', function($scope, dep1, dep2) {
  ...
  $scope.aMethod = function() {
    ...
  }
  ...
}]);
依赖项注释
有三种方法可以使用服务名称信息注释代码:

Using the inline array annotation (preferred)
Using the $inject property annotation
Implicitly from the function parameter names (has caveats)
在这三种方法中,使用内联数组注释是首选方法 最后一种获得依赖关系的最简单方法是假设 函数参数名称是依赖项的名称。
函数参数名称方法隐含的优点是没有名称数组与函数参数保持同步。您还可以自由地重新排序依赖项。而缺点是
如果您计划缩减代码,您的服务名称将被重命名并中断您的应用程序。

资料来源:

也请阅读此文;