Angularjs中的事件廣播 —全面解析$broadcast,$emit,$on
Angularjs中不同作用域之間可以通過組合使用$broadcast,$emit,$on的事件廣播機制來進行通信
介紹:
$broadcast的作用是將事件從父級作用域傳播至子級作用域,包括自己。格式如下:$broadcast(eventName,args)
$emit的作用是將事件從子級作用域傳播至父級作用域,包括自己,直至根作用域。格式如下:$emit(eventName,args)
$on用于在作用域中監(jiān)控從子級或父級作用域中傳播的事件以及相應的數(shù)據(jù)。格式如下:$on(event,data)
上述說明中,eventName是需要監(jiān)控的事件的名稱,$on 方法中的參數(shù)event是事件的相關(guān)對象,data是事件傳播的數(shù)據(jù)。
在$on的方法中的event參數(shù),有如下的屬性和方法
事件屬性/方法 功能性說明
| 事件屬性/方法 | 功能性說明 |
|---|---|
| event.targetScope | 獲取傳播事件的作用域 |
| event.currentScope | 獲取接收事件的作用域 |
| event.name | 傳播的事件的名稱 |
| event.stopPropagation() | 阻止事件進行冒泡傳播,僅在$emit事件中有效 |
| event.preventDefault() | 阻止傳播事件的發(fā)生 |
| event.defaultPrevented | 如果調(diào)用了preventDefault事件則返回true |
代碼:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
<script src="ajjs/angularjs.js"></script>
<script>
var myApp = angular.module("myApp", []);
//控制器Self
myApp.controller("Self", function ($scope,$window) {
//button的傳播事件
$scope.toParent = function () {
//注冊一個向上傳播的事件,eventName:'FromSelf', data:oneObject
$scope.$emit("FromSelf", { divName: "Self", description: "向父傳播數(shù)據(jù)" });
};
$scope.toChild = function () {
//注冊一個向下傳播的事件,eventName:'FromSelf', data:oneObject
$scope.$broadcast("FromSelf", { divName: "Self", description: "向子傳播數(shù)據(jù)" });
};
$scope.name = "Self";
$scope.$on("FromChild", function (event, data) {
$window.alert("當前節(jié)點" + event.currentScope.name + "截獲到了來自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
});
});
//控制器Parent
myApp.controller("Parent", function ($scope, $window) {
$scope.name = "Parent";
//$on用于事件
$scope.$on("FromSelf", function (event, data) {
$window.alert("當前節(jié)點" + event.currentScope.name + ",截獲到了來自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
});
$scope.$on("FromChild", function (event, data) {
$window.alert("當前節(jié)點" + event.currentScope.name + ",截獲到了來自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
});
});
//控制器Child
myApp.controller("Child", function ($scope, $window) {
$scope.name = "Child";
//$on用于截獲來自父級作用域的事件
$scope.$on("FromSelf", function (event, data) {
$window.alert("當前節(jié)點" + event.currentScope.name +"截獲到了來自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
});
//button的傳播事件
$scope.toTop = function () {
//注冊一個向上傳播的事件,eventName:'FromChild', data:oneObject
$scope.$emit("FromChild", { divName: "Child", description: "向上播數(shù)據(jù)" });
};
});
</script>
</head>
<body>
<form name="test">
<div ng-controller="Parent">
這里是父級Div
<div ng-controller="Self">
這里是子級SelfDiv
<input type="button" ng-click="toParent()" value="向ParentDiv傳播事件" />
<input type="button" ng-click="toChild()" value="向ChildDiv傳播事件" />
<div ng-controller="Child">
這里是子級ChildDiv
<input type="button" ng-click="toTop()" value="向上傳播事件" />
</div>
</div>
<div ng-controller="Borther">
這里是Self的兄弟BortherDiv
</div>
</div>
</form>
</body>
</html>
Code
效果:

以上這篇Angularjs中的事件廣播 —全面解析$broadcast,$emit,$on就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
AngularJs定制樣式插入到ueditor中的問題小結(jié)
這篇文章主要介紹了AngularJs定制樣式插入到ueditor中的問題小結(jié)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08
AngularJs bootstrap搭載前臺框架——基礎頁面
本文主要介紹AngularJs bootstrap搭載前臺框架基礎頁面的建設,這里整理餓了相關(guān)資料及實現(xiàn)實例代碼,有興趣的小伙伴可以參考下2016-09-09
angularJS實現(xiàn)動態(tài)添加,刪除div方法
下面小編就為大家分享一篇angularJS實現(xiàn)動態(tài)添加,刪除div方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
基于AngularJS實現(xiàn)頁面滾動到底自動加載數(shù)據(jù)的功能
本文主要給大家介紹基于AngularJS實現(xiàn)頁面滾動到底自動加載數(shù)據(jù)的功能,通過第三方控件來實現(xiàn),感興趣的朋友跟著小編一起看看具體實現(xiàn)代碼吧2015-10-10
Angularjs 實現(xiàn)動態(tài)添加控件功能
這篇文章主要介紹了Angularjs 實現(xiàn)動態(tài)添加控件功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05

