angularjs $emit $brodcast $on 事件广播机制

Angularjs中不同作用域之间可以通过组合使用$broadcast,$emit,$on的事件广播机制来进行通信。基本用法就是:html当中定义一个事件,在一个controller里面通过事件触发一个方法,在方法里面通过$broadcast或$emit来定义一个变量,在父,子controller里面通过$on来获取。 

一:基本格式为:

1:$emit只能向parent controller传递event与data

      格式如下:$emit(eventName,args)

2:$broadcast只能向child controller传递event与data

      格式如下:$broadcast(eventName,args)

3:$on用于接收event与data

      格式如下:$on(event,arges) 也就是

$on的格式

二:一个实例,展现具体用法

angularjs $emit $brodcast $on 事件广播机制_第1张图片
view

这个是一个带有多层controller的view层。我自己,child,跟我平级的controller都包含在parentCtrl里面。其中的一个点击事件是在我自己的controller上面,并且点击的时候带有参数。那么,怎么在不同的作用域之间相互传递参数呢?就用到了事件广播机制。

angularjs $emit $brodcast $on 事件广播机制_第2张图片
controller

这个是点击我这个controller的时候触发的事件。其中,$scope.$emit()向父级的controller广播了个事件,这个事件就是:'I am myself',param+'my fathor' 我把自己发送给了父级;'I am myself',param+'my child' 我把自己发送给了子级。

接下来就是controller接收了。

1:parentCtrl 父级的controller

angularjs $emit $brodcast $on 事件广播机制_第3张图片
parent controller 

parentCtrl 当中用$on分别接收了$emit 和 $broadcast传的值,但是,从打印效果上来看,只有第一个$on生效了,如图

emit

这说明:$emit只能向parent controller传递event与data

2:childCtrl 子级的controller

child controller

打印效果为:

child

这个说明:brodcast传递给childCtrl的参数生效了。$broadcast只能向child controller传递event与data

3:broCtrl  平级的controller

angularjs $emit $brodcast $on 事件广播机制_第4张图片
平级controller

这个controller什么也打印不出来,因为这个controller是myselfCtrl的平级,$emit和$brodcast是不能向平级广播并传递参数的。

从controller当中,我们可以看到,接收来自父级或者子级的广播否是用的$on来接收的,要注意。

从上面的例子,就可以大概了解angularjs 的$emit $brodcast 和 $on 这三个事件广播机制的含义和用法了。

你可能感兴趣的:(angularjs $emit $brodcast $on 事件广播机制)