工作中經常用到的是$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”)