我在这里做了一点小提琴。在下面的示例中,有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
答案 0 :(得分:1)
Angular的依赖注入可以根据名称推断要注入的服务。所以是的,如果你根据服务的名称命名参数,那么Angular将推断出正确的服务,参数排序是无关紧要的。这不是缩小安全的,如果您要缩小代码,则需要使用其他注入方法之一。请参阅Angular的Dependency Injection指南中的隐式注释部分。
有一个$rootScope
注入到每个控制器中,因此它们不是彼此的副本,而是相同的对象。本地范围通过原型继承从$rootScope
继承。因此,如果您尝试访问本地作用域上的属性,Angular将首先检查该属性的本地作用域,但如果它不存在,它将搜索父作用域(然后是父作用域的父作用域等)。请参阅Angular的Scope指南,尤其是关于Scope Hierarchies的部分。