[TOC]
# 作用域事件的传播
在Angular中,作用域间有非常清晰的层次结构关系,类似于DOM树状图形,最顶层的就是rootscope作用域,其余的都是在它基础之上进行分支和嵌套的。在这种关系下的作用域,它们之间的数据通信变得相对复杂,概括来说,有下列两种方式可以实现作用域的通信。
* 服务(service)通过在作用域间创建一个单例的服务,由该服务来处理各个作用域间的数据通信
* 事件(event)除使用服务外,还可以通过作用域间的事件进行数据通信,而要使用事件,则必须调用Angular中提供的两个方法$broadcasted和$emitted
## $broadcasted
方法$broadcasted的功能是将事件从父级作用域传播至子级作用域,它的调用格式$broadcast(eventname, data)其中,参数eventname为定义的事件名称,data为事件传播过程中携带的数据信息。
~~~js
$scope.$broadcast('filterStateChangeBroadcast',msg);
~~~
## $emitted
方法$emitted的功能是将事件从子级作用域传播至父级作用域,它的调用格式如下。 $emitted(eventname, data)各参数的功能与$broadcasted相同。
~~~js
$scope.$emit('filterStateChange', 'xxx');
~~~
## $on
此外,除这两个传播事件的方法外,还需要通过调用$on方法,在作用域中监控传播来的事件并获取相应的数据,它的调用格式如下。
~~~js
$scope.$on(eventname, function(event,data){ // 接收传播事件的处理代码 })
~~~
在上述调用格式中,eventname为需要监控的传播事件名称,event为事件传播过程中自带的特征,该特征包括下列几个重要的属性
* event.targetScope 返回发起传播事件的作用域名称
* event.currentScope 返回正在接收传播事件的作用域名称
* event.name 返回传播时间的名称
* event.stopPropagation() 防止事件冒泡
* event.preventDefault() 阻止代码事件的发生
* event.defaultPrevented当执行了preventDefault方法时,defaultPrevented为true,否则为false
而在$on方法处理传播事件的函数中,另外一个data参数,则为事件在传播过程中携带的数据,通过该对象可以在各个监控的作用域中获取传播时的数据,实现数据通信的功能。虽然说通过作用域的事件可以实现数据通信的功能,但是它们的传播范围非常有限,只能是在父和子级的作用域间进行传播,其他不具有这种关系的作用域将无法监控到传播来的事件。
- Angular简介
- angular1资料网站
- Angular初级部分
- 打破传统的前端
- Angular基本组成部分
- Angular环境搭建
- Angular项目测试
- Angular基础概念
- Angular模块
- Angular控制器
- Angular指令
- Angular表达式
- Angular视图
- Angular基础实战
- Angular模块创建和使用
- Angular控制器和模型创建
- scope对象
- 控制器中调度window对象和document对象
- Angular表达式调度过滤器
- Angular中的ng模块全局方法
- Angular模板应用
- 使用指令复制元素
- 使用指令隐藏显示元素
- Angular指令ng-if
- ng-src和ng-href
- Angular处理样式
- Angular作用域事件传递
- 表单中的元素
- Angular初学者常见的坑
- 再论双向绑定
- Angular中级部分
- Angular路由机制
- ui-router管理状态
- ui-router状态嵌套和视图嵌套
- ui-router多个命名的视图
- ui-router路由控制
- 自定义指令
- 自定义过滤器
- Angular项目目录结构
- Angular服务
- Angular高级部分
- Angular依赖注入
- README