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 相关文章推荐
Javascript玩转继承(二)
May 08 Javascript
JS和JQ的event对象区别分析
Nov 24 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
javascript实现10个球随机运动、碰撞实例详解
Jul 08 Javascript
图文详解Javascript中的上下文和作用域
Feb 15 Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 Javascript
简单了解vue.js数组的常用操作
Jun 17 Javascript
简单了解JavaScript中常见的反模式
Jun 21 Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 Javascript
Vue中引入svg图标的两种方式
Jan 14 Vue.js
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 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垃圾回收机制简单说明
2010/07/22 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
常用简易JavaScript函数
2009/04/09 Javascript
json 实例详细说明教程
2009/10/31 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
文明礼仪伴我行演讲稿
2014/05/12 职场文书
安全口号大全
2014/06/21 职场文书
欢迎领导标语
2014/06/27 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2015年安全生产责任书
2015/01/30 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS