在一些使用angular框架的大型项目中,似乎有很多控制器,每个控制器都有自己的$scope.$rootscope$rootScope顶级作用域,也叫根作用域,类似对于窗口,可以在任何子范围内访问窗口的属性。$rootScope是所有控制器进行数据通信的中间域,即$rootScope中的数据可以通过每个控制器中的$rootScope.xxx获取。$scope(1)$scope的作用是在view和controller之间建立桥梁。基于作用域的视图会在数据修改时立即更新$scope,当同一个$scope发生变化时会立即重新渲染视图。每一个controller控制器对应一个$scope。通过为其属性赋值,可以将数据传递给模板渲染。(2)生命周期创建:在创建控制器或指令时,AngularJS会用$injector创建一个新的作用域,并在这个新创建的控制器或指令运行时将作用域传入。链接:当Angular开始运行时,所有$scope对象都附加或链接到视图。创建$scope对象的所有函数也将它们自己附加到视图。这些范围将注册需要在Angular应用程序上下文更改时运行的函数。这些函数称为$watch函数,Angular使用这些函数来了解何时开始事件循环。更新:当事件循环运行时,它通常在顶级$scope对象(称为$rootScope)上执行,每个子作用域执行自己的脏值检测。每个监视功能都会检查更改。如果检测到任何更改,$scope对象将触发指定的回调函数。销毁:当视图中不再需要$scope时,该范围将清理并销毁自身。虽然你永远不需要清理范围(因为Angular会为你处理),但知道谁创建了范围仍然很有用,因为你可以在这个$scope上使用名为$destory()的方法来清理范围。.Prototypeinheritancescope就是AngularJS中的作用域(其实就是存放数据的地方),和JavaScript的原型链很像。搜索时,先寻找自己的范围。如果没有找到,则向上搜索作用域链,直到到达根作用域rootScope。
