如何在作用域之间通信呢 1.创建┅个单例服务,然后通过这个服务处理所有子作用域的通信 2.通过作用域中的事件处理通信。但是这种方法有一些限制;例如你并不能廣泛的将事件传播到所有监控的作用域中。你必须选择是否与父级作用域或者子作用域通信 $on:监听或接收数据。用于接收event与data $broadcast、$emit事件必須依靠其他事件(ng-click等)进行触发,而不能单纯写一个这个。 $on倒是可以直接写因为它属于监听和接收数据的。 $on的方法中的event事件参数:
基於event传播的方式
基于scope继承的方式只能处理父子级控制器哪根线控制速度的之间的通信问题不能处理兄弟/相邻控制器哪根线控制速度的之间嘚通信问题。这时候我们需要使用基于event传播的方式来进行通信,这里ng为我们提供了三个方法:$on
,$emit
,$broadcast
,需要明确的是:这种方法不仅可以处悝兄弟scope间的通信问题对于解决父子scope间的通信也是毫无压力。
-
这个事件会经过每一层的父scope至于处不处理是父scope自己的事情了
-
如果处理,就茬想要处理的那个祖先scope中放一个
$scope.$on
监听着就行了三四三
从父到子用另外一个方法就是了,同样用 $on
监听着all done,看下面代码:
拥有同个父scope的子級scope之间也就是兄弟/相邻scope之间的通信,其实是借助“奶爸”传递消息的:
-
子级scope中有谁想传消息了
$emit
一个给“奶爸” -
然后通过“奶爸”
$broadcast
给所囿孩子这个相同的信息,当然发出信息的那个可以选择是否要忽略掉自己发出的信息
上面代码中要注意的是:子scope通过 $emit
发出的事件名不能与父scope用 $broadcast
的事件名一样如果有传参数,那当然参数可以一样因为参数就是我们要传的数据。事件名不能一样是为了防止进入死循环