AngularJS 事件$emit 和$broadcast

页面之间信息传递(子页面->父页面), $emit冒泡事件。

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

在一个

 

$emit()事件函数的调用中,事件从子作用域冒泡到父作用域。在产生事件的作用域

之上的所有作用域都会收到这个事件的通知。

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

$emit()方法带有两个参数。

1.name(字符串)要发出的事件名称。

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

$emit()方法返回了一个事件对象(关于事件对象的细节,查看20.3节)。从监听器中发出的一切异常都会传递到$exceptionHandler服务中。

 

要把事件向下传递(从父作用域到子作用域),我们使用$broadcast()函数。

$broadcast()方法上,每个注册了监听器的子作用域都会收到这个信息。事件传播到所有的指令和当前作用域的间接作用域上,并且一路往下调用每个监听器。

 

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

Angular中触发的事件类型。

例如,我们可以在路由变更过程被触发时,监听事件:

scope.$on('$routeChangeStart',

function(evt, next, current) {

//一个新的路由被触发了

});

不管什么时候事件$routeChangeStart(路由将要变更的时候,会广播这个事件)被触发,

监听器(这个函数)都会被调用。Angularevt对象作为第一个参数传给正在监听的一切事件,不管它是我们自定义的事件还是内置的Angular服务。

 

 

posted @ 2015-10-04 11:02  Byron12345  阅读(369)  评论(0编辑  收藏  举报