Scope层级结构
@H_403_2@@H_403_2@顶层服务对象$rootScope来源于ng模块,由$RootScopeProvider提供。因为ng模块是angular.bootstrap()执行时依赖的模块,所以在整个应用中都可以通过$rootScope引用,而且在这个应用中是唯一的。但唯一性仅限于单个应用内,因为服务都存在注入器中,而每个bootstrap应用有自己的注入器,所以,$rootScope作为一个服务,在不同的应用中是不同的,彼此互不影响。 @H_403_2@除了顶层的$rootScope,子Scope分为普通子Scope和孤立子Scope:普通Scope继承自父Scope,因此可以在普通子Scope中直接访问父Scope的属性;孤立Scope和父Scope没有继承关系,所以不能直接访问父Scope的属性,但通过$parent属性可以访问父Scope对象。 @H_403_2@不论普通子Scope还是孤立子Scope,都可以通过$scope.$root访问$rootScope。
创建子Scope
$childScope = $parentScope.$new(isolate,parent)
监测单个表达式
$scope.$watch(watchExp,listener,objectEquality)
- fn: 即参数listener。
- get: $parse(watchExp)得到的方法。
- exp: 即参数watchExp。
- eq:即参数objectEquality。
- last: 参数watchExp上一次的执行结果。
- value:这次执行的结果。
- last:上次执行的结果。
- current:当前scope对象。
- current:scope对象。
监测一组表达式
$scope.$watchGroup(watchExps,listener)
- newValues:这次执行的结果。
- oldValues:上次执行的结果。
- current:当前scope对象。
监测集合对象
$scope.$watchCollection(collection,listener)
绑定事件监听
var destroyFn = $scope.$on(name,listener); destroyFn(); // remove this listener
- name:事件名。
- targetScope:目标scope。
- currentScope:当前scope。
- stopPropagation:方法,中断执行。
- preventDefault:方法,取消默认行为。
- defaultPrevented:如果preventDefault()被执行过,则为true。
向下派发事件
@H_403_2@把Scope的层级结构比作一个从上而下的树,向下派发就是从根节点到子节点的过程。 @H_403_2@在当前Scope派发事件,并派发给所有的子Scope(包括后代Scope),这个与浏览器的事件派发完全不同。更重要的是,事件是按树的深度优先顺序派发的:根节点à左节点à…à左叶子节点à右叶子节点à…à右节点。$scope.$broadcast(name,args);
向上派发事件
@H_403_2@从当前Scope开始,向父Scope派发事件。$scope.$emit(name,args);
执行表达式
@H_403_2@在当前Scope范围内执行表达式。$scope.$eval(expr,locals); $scope.$apply(expr); // == $parse(expr)(this,locals)