angularjs中的广播、事件传播总结

来源:互联网 发布:adams软件介绍 编辑:程序博客网 时间:2024/06/10 14:54

我们做的web应用的组件好多是松耦合的,在这样的情况下,即时的同行不总是可行的。

angular的事件和浏览器本身的dom事件不是想通的,这就意味着我们只能在作用域上来监听angular的事件,而不是监听dom事件;那么,问题来了,我们在其他的控制器怎么监听到本控制器的事件变化了?这就要用到angular为我们提供的广播!

 因为作用域是有层次的,所以我们可以在作用域链上传递事件。

可以使用的广播有以下几种:

1.使用$emit来冒泡事件

要把事件沿着作用域链向上派送(从子作用域到父作用域),我们要使用$emit函数。

在一个$emit事件函数的调用中,事件从子作用域冒泡到父作用域。在产生事件的作用域之上的所有作用域都会收到这个事件的通知。

当想要跟应用的其他部分交流状态的变更时,我们使用$emit。如果想要跟$rootScope通信,需要$emit这个事件。

*** $emit方法带有两个参数。

1.name(字符串)

要发出的事件名称。

2.args(集合)

一个参数的集合,作为对象传递到事件监听器中。

$emit方法返回了一个事件对象从监听器中发出的一切异常都会传递到$exceptionHandler服务中。

使用$broadcast向下传递事件

要把事件向下传递(从父作用域到子作用域),我们使用$broadcast函数。在$broadcast方法上,每个注册了监听器的子作用域都会收到这个信息。事件传播到所有的指令和当前作用域的间接作用域上,并且一路往下调用每个监听器。用了$broadcast方法之后,就没法取消事件的发送了。$broadcast方法自身带有两个参数。

1.name(字符串)

要发出的事件名称。

2.args(集合)

一个参数的集合,作为对象传递到事件监听器中。

从监听器中发出的一切异常都会传递到$exceptionHandler服务中。

事件监听

要监听一个事件,我们可以使用$on方法。这个方法为具有某个特定名称的事件注册了一个监听器。事件名称就是在Angular中触发的事件类型。

不管什么时候事件$routeChangeStart(路由将要变更的时候,会广播这个事件)被触发,监听器(这个函数)都会被调用。
Angular把evt对象作为第一个参数传给正在监听的一切事件,不管它是我们自定义的事件还是内置的Angular服务。

Angular核心框架发送事件,我们监听之后执行操作。可以用事件来让自己的Angular对象能在全局事件的不同状态上与应用交互。
我们用$emit()调用的有好几个事件,它们把事件往上发,更多调用的是$broadcast()事件。

0 0
原创粉丝点击