定义一个控制器 - angularjs

时间:2015-02-05 12:34:18

标签: angularjs

我这样做。

方法1:

var app = angular.module('MyModule', ['ngDialog']);
app.controller('MyController', function ($scope,ngDialog) {
///
});

但我在文章

中看到了很多类似的内容

方法2:

app.controller('MyController', ['$scope', function ($scope) {
///
}]);

请帮助我理解为什么在方法2中提到两次$ scope。 方法1,一个很好的做法。如果没有,在什么情况下会失败。

2 个答案:

答案 0 :(得分:2)

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

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

改变
app.controller('MyController', function (a,b) { //a, b is the change
///
});

或类似的东西。

使用方法2,您将名称指定为字符串,并使用这些字符串AngularJS知道要注入的内容,尽管缩小更改了变量'名。

您可以阅读有关此here的更多信息。

答案 1 :(得分:2)

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

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)

在这三个中,使用内联数组注释是首选方法 最后一种获取依赖关系的最简单方法是假设 函数参数名称是依赖项的名称 来自函数参数名称方法的优点方法是没有名称数组与函数参数保持同步。您也可以自由地重新排序依赖项。劣势If you plan to minify your code, your service names will get renamed and break your app.

来源:this