角度函数参数顺序

时间:2015-11-19 17:11:27

标签: angularjs

我在这里做了一点小提琴。在下面的示例中,有3个控制器:

1st是常规控制器。

第二次我更改了控制器构造函数参数的排序

第3个赋值给本地$ scope而不是$ rootScope。

第二个控制器显示即使我改变了排序和参数数量,值仍然被分配给根范围。从这里我得出结论,角度以某种方式知道函数的参数名称,无论它们的顺序如何? (有点像命名的参数?)这听起来很奇怪。参数名称如何表示函数自己的“花括号”之外的东西?

第3个控制器显示,所有本地作用域都是$ rootScope的副本,而{{variable}}约定指向本地作用域内的变量,而不是全局根作用域。

我对这两个结论是对的吗?

index.html:

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css">
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
    <script src="script.js"></script>
  </head>

  <body ng-app="myApp" ng-controller="myController">

    <div ng-controller="myController">
      <h3>Echo: {{one}}</h3>
    </div>

    <div ng-controller="myController2">
      <h3>Echo: {{two}}</h3>
      <h3>Echo: {{three}}</h3>
    </div>

    <div ng-controller="myController3">
      <h3>Echo: {{three}}</h3>
    </div>

</body>
</html>

的script.js

var app = angular.module('myApp',[]);
app.run(function($rootScope) {
    $rootScope.today = new Date();
});
app.controller("myController", function($rootScope, $scope){
    $rootScope.one = 'root scope one';
});
app.controller("myController2", function($scope, $scope, $rootScope){
    $rootScope.two = 'root scope two';
});
app.controller("myController3", function($scope, $scope, $rootScope){
    $scope.three = '~scope three';
});

输出:

Echo: root scope one

Echo: root scope two

Echo:

Echo: ~scope three

1 个答案:

答案 0 :(得分:1)

  1. Angular的依赖注入可以根据名称推断要注入的服务。所以是的,如果你根据服务的名称命名参数,那么Angular将推断出正确的服务,参数排序是无关紧要的。这不是缩小安全的,如果您要缩小代码,则需要使用其他注入方法之一。请参阅Angular的Dependency Injection指南中的隐式注释部分。

  2. 有一个$rootScope注入到每个控制器中,因此它们不是彼此的副本,而是相同的对象。本地范围通过原型继承从$rootScope继承。因此,如果您尝试访问本地作用域上的属性,Angular将首先检查该属性的本地作用域,但如果它不存在,它将搜索父作用域(然后是父作用域的父作用域等)。请参阅Angular的Scope指南,尤其是关于Scope Hierarchies的部分。