Angular JS - module.controller参数

时间:2017-07-27 17:32:05

标签: javascript angularjs angular-controller angular-module

我是Angular JS的新手,他们在教程中指出创建控制器的方式是:

angular.module('app', [])
  .controller('TodoController', ['$scope', function ($scope) {
    $scope.todos = [
      { title: 'Learn Javascript', completed: true },
      { title: 'Learn Angular.js', completed: false },
      { title: 'Love this tutorial', completed: true },
      { title: 'Learn Javascript design patterns', completed: false },
      { title: 'Build Node.js backend', completed: false },
    ];
  }]);

我想了解每个参数是什么:

  • ' TodoController'
  • 阵列
    • ' $范围'
    • 功能

我猜第一个是控制器的名称,最后一个是TodoController构造函数。

但是'$scope'是什么?要在HTML上使用的变量名,方法名?

我可以在数组中发送更多参数吗?

我搜索了Angular文档,但它没有关于方法的文档而非常蹩脚。搜索类代码既没有提供更多信息。

3 个答案:

答案 0 :(得分:2)

在数组中,参数(String)是(不包括最后一个,是构造函数)是需要在数组中的序列中注入的依赖项,它们将以相同的顺序传递在控制器的实现中(即构造函数)。

$scope是一个对象,它维护与视图的绑定,其内容在视图和控制器中都可用。无论何时将其注入新控制器并且需要创建该控制器的实例,它都会由($new然后是层次结构)的$rootScope方法创建。

答案 1 :(得分:1)

是。你是对的。

第一个参数是控制器名称。第二个数组,其中数组中的最后一个元素将是控制器函数,其他元素是依赖项。 这称为内联数组注释。

您可以在不传递数组的情况下创建控制器,除非您没有缩小代码(隐式注释)。

小心:如果您计划缩小代码,您的服务名称将被重命名并破坏您的应用。

请检查三种创建控制器或服务的方法。 https://docs.angularjs.org/guide/di

答案 2 :(得分:1)

第二个参数(字符串数组+函数)用于依赖注入。

angular.controller('TodoController', ['$scope', function ($scope) { ... }])

如果您的代码被缩小,则angular将知道要注入哪些依赖项,因为字符串不会受到缩小的影响。

因此,缩小后的上述代码将变成这样:

angular.controller("TodoController",["$scope",function(o){...}]);

角度的依赖注入算法仍然可以读取它。

PS。数组是可选的,你可以传递普通的函数。