AngularJS中的控制器是一个函数,用来向视图的作用域添加额外的功能。我们用它来给作用域对象设置初始状态,并添加自定义行为。
AngularJS同其他JavaScript框架最主要的一个区别就是,控制器并不适合用来执行DOM操作,格式化或数据操作,以及除存储数据模型之外的状态维护操作。它只是视图和$scope之间的桥梁。
AngularJS应用的任何的一个部分,无论它渲染在哪个上下文,都有父级作用域存在。对ng-app所处的层级来讲,它的父级作用域就是$rootScope。
有一个例外,在指令内部创建的作用域被称为孤立作用域。
关于查找属性:默认情况下,AngularJS在当前的作用域中无法找到属性的时候,便会在父级作用域中进行查找。如果AngularJS找不到对应的属性,会顺着父级作用域一直向上查找。知道抵达$rootScope为止。如果$rootScope中也找不到,程序会继续运行,但试图无法更新。
<div ng-controller="ParentController">
<div ng-controller="ChildController">
<button ng-click="sayHello()">sayHello</button>
</div>
{{ person }}
</div>
<script type="text/javascript">
var app = angular.module("myApp", []);
app.controller("ParentController", function($scope) {
$scope.person = {
name: "lin"
};
});
app.controller("ChildController", function($scope) {
$scope.sayHello = function() {
$scope.person.age = 16;
};
});
</script>
*良好的应用会将复杂的逻辑放到指令和服务中。通过使用指令和服务,我们可以将控制器重构成一个轻量且容易维护的形式。