angular之中,$scope $rootScope $watch $state 是什么?
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
1、AngularJS Scope(作用域)
Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。Scope 是一个对象,有可用的方法和属性。
Scope 可应用在视图和控制器上。$scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.
有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,
同样的 $scope 发生改变时也会立刻重新渲染视图.
1、根作用域 rootScope
所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。
$rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用
(1)$scope
$scope是一个把view(一个DOM元素)连结到controller上的对象。 在我们的MVC结构里,这个 $scope 将成为model,它提供一个绑定到DOM元素(以及其子元素)上的excecution context。
每一个Angular应用都会有一个 $rootScope。这个 $rootScope 是最顶级的scope,它对应着含有 ng-app 指令属性的那个DOM元素。 如果页面上没有明确设定 $scope ,Angular 就会把数据和函数都绑定到这里。
app.controller("children",function ($scope,$rootScope) {
$scope.child = "child";
$rootScope.rootScope = "rootScope$rootScope"
});
Angular 应用启动并生成视图时,会将根 ng-app 元素与 $rootScope 进行绑定.$rootScope 是所有 $scope 的最上层对象, 可以理解为一个 Angular 应用中得全局作用域对象,所以不应该附加太多逻辑或者变量给$rootScope,和污染 Javascript 全局作用域是一样的道理.
$watch:
angularjs核心之一是双向绑定,那么这个双向绑定是如何实现的呢? 当我们在创建出scope下的一个新属性的时候,ng就会主动为我们新属性注册$watch这个方法,$watch用来监听 的数据变化,当数据变化之后,就立即把view和scope上数据同步。AngularJS就能够自动注册并监听变量的改变。 AngularJS会首先将在{{ }}中声明的表达式编译成函数并调用$watch方法。
$watch是一个scope函数,用于监听模型变化(4)$state
$state是ui-rooter的一项服务负责表示状态以及它们之间的转换。它还提供了接口来询问当前状态
常用的方法有:$stateParams是一个对象,包含 url 中每个参数的键/值。$stateParams可以为控制器或者服务提供 url 的各个部分。 注意:$stateParams必须与一个控制器相关,并且$stateParams中的“键/值”也必须事先在那个控制器的url属性中有定义。
angular.module("myApp",[]).controller('MainCtrl', function($scope) {
$scope.name = "hello";
$scope.updated = -1;
$scope.$watch('name', function() {
$scope.updated++;
});
});
//创造一个新的$watch的方法。第一个参数是一个字符串或者函数,在这里是只是一个字符串,就是我们要监视的变量的名字,
// 第二个参数是当$watch说我监视的表达式发生变化后要执行的。当controller执行到这个$watch时,它会立即执行一次 参考二:关于$watch应用的一些小技巧
参考三:Watch how the apply runs a digest
感谢大家观看
By 蓝裕伟