工作中经常用到的是$broadcast、$on,$emit自己用的很少。
一.关于$broadcast事件:该服务发布一个向下的事件从父作用域开始传给下面所有的子作用域(包括自己),并通知$on接收,该事件的生命周期也是从broadcast被启动开始。下面的所有使用$on接收的作用域都会接收到通知。之后,事件向下传播,在这期间,作用域中的监听器接收到通知,获取事件,但是不会注销事件,事件继续往下传播。
1.实现方式:只需在后面加一行代码即可:$scope.$broadcast("自定义的事件名--eventName",“要传输的数据--args”)
2.使用$scope.$broadcast():意味着父子控制器传值,即把父控制器的数据,传给它下面所有的字控制器。使用$rootScope.$broadcast():意味着把值从根作用域开始,传给所有用$on接收的控制器。
二.关于$on方法:监听指定类型(eventName)的事件,获取传输的数据
1.实现方式:$scope.$on("eventName",function(event,data){
其中eventName:需要监控的事件的名称;
event:事件的相关对象
data:事件传播的数据。
})
小技巧:a.使用$rootScope.$broadcast()广播事件时,一般使用$scope.$on()接收时,数据传输只能接收一次,使用$rootScope.$on()则可以多次接收
b.使用$scope.$on为避免多次调用接口,可写一行代码:$scope.$$listeners.eventName = [];
三.关于$emit事件:该服务贯穿作用域发出一个向上的事件,从子级作用域往根作用域传播(包括自己),该事件的生命周期开始于emit被启动的地方,传递期间并通知那些注册在作用域上的监听器$on,如果这期间一个监听器接受到了这个事件,会注销这个事件,那么事件将会停止向上继续传播。
1.使用方法: $scope.$emit("自定义的事件名--eventName",“要传输的数据--args”)