Angularjs中的事件广播 —全面解析$broadcast,$emit,$on


Posted in Javascript onMay 17, 2016

Angularjs中不同作用域之间可以通过组合使用$broadcast,$emit,$on的事件广播机制来进行通信

介绍:

$broadcast的作用是将事件从父级作用域传播至子级作用域,包括自己。格式如下:$broadcast(eventName,args)

$emit的作用是将事件从子级作用域传播至父级作用域,包括自己,直至根作用域。格式如下:$emit(eventName,args)

$on用于在作用域中监控从子级或父级作用域中传播的事件以及相应的数据。格式如下:$on(event,data)

上述说明中,eventName是需要监控的事件的名称,$on 方法中的参数event是事件的相关对象,data是事件传播的数据。

在$on的方法中的event参数,有如下的属性和方法

事件属性/方法 功能性说明

事件属性/方法 功能性说明
event.targetScope 获取传播事件的作用域
event.currentScope 获取接收事件的作用域
event.name 传播的事件的名称
event.stopPropagation() 阻止事件进行冒泡传播,仅在$emit事件中有效
event.preventDefault() 阻止传播事件的发生
event.defaultPrevented 如果调用了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: "向父传播数据" });
      };
      $scope.toChild = function () {
        //注册一个向下传播的事件,eventName:'FromSelf', data:oneObject
        $scope.$broadcast("FromSelf", { divName: "Self", description: "向子传播数据" });
      };
      $scope.name = "Self";
      $scope.$on("FromChild", function (event, data) {
        
        $window.alert("当前节点" + 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("当前节点" + event.currentScope.name + ",截获到了来自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
      }); 
      $scope.$on("FromChild", function (event, data) {
        $window.alert("当前节点" + 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("当前节点" + event.currentScope.name +"截获到了来自" + data.divName + "的事件:" + event.name + ",它的作用是" + data.description);
      });
      
      //button的传播事件
      $scope.toTop = function () {
        //注册一个向上传播的事件,eventName:'FromChild', data:oneObject
        $scope.$emit("FromChild", { divName: "Child", description: "向上播数据" });
      };

    });
  </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

其他属性:
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on

以上这篇Angularjs中的事件广播 —全面解析$broadcast,$emit,$on就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery isType() 类型判断代码
Feb 14 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
Apr 02 Javascript
js修改input的type属性问题探讨
Oct 12 Javascript
js比较日期大小的方法
May 12 Javascript
一个极为简单的requirejs实现方法
Oct 20 Javascript
浅谈Node.js:fs文件系统模块
Dec 08 Javascript
微信小程序分页加载的实例代码
Jul 11 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
关于自定义Egg.js的请求级别日志详解
Dec 12 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 Javascript
Vue3.0 响应式系统源码逐行分析讲解
Oct 14 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
iScroll.js 使用方法参考
May 16 #Javascript
BootStrap的JS插件之轮播效果案例详解
May 16 #Javascript
老司机带你解读jQuery插件开发流程
May 16 #Javascript
jQuery 获取多选框的值及多选框中文的函数
May 16 #Javascript
jQuery插件制作的实例教程
May 16 #Javascript
总结jQuery插件开发中的一些要点
May 16 #Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
May 16 #Javascript
You might like
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
检测png图片是否完整的php代码
2010/09/06 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
Python中的下划线详解
2015/06/24 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
银行开业庆典方案
2014/02/06 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
开场白怎么写
2015/06/01 职场文书
预备党员考察意见范文
2015/06/01 职场文书
如何写通讯稿
2015/07/22 职场文书
导游词之桂林
2019/08/20 职场文书