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 相关文章推荐
JS 文件传参及处理技巧分析
May 13 Javascript
Dom 学习总结以及实例的使用介绍
Apr 24 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
Dec 12 Javascript
jquery搜索框效果实现方法
Jan 16 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
Aug 25 Javascript
JavaScript+html5 canvas实现本地截图教程
Apr 16 Javascript
JS简单随机数生成方法
Sep 05 Javascript
jQuery实现大图轮播
Feb 13 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
微信小程序实现单选选项卡切换效果
Jun 19 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
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
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
php使用正则验证中文
2016/04/06 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
深入理解js promise chain
2016/05/05 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
快速了解python leveldb
2018/01/18 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
python实现斗地主分牌洗牌
2020/06/22 Python
django haystack实现全文检索的示例代码
2020/06/24 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
小学教师办公室制度
2014/02/03 职场文书
机械专业求职信范文
2014/07/15 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python