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焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
May 12 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
jQuery横向擦除焦点图特效代码分享
Sep 06 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
正则表达式(语法篇推荐)
Jun 24 Javascript
深入理解(function(){... })();
Aug 16 Javascript
利用vue写todolist单页应用
Dec 15 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 Javascript
angularjs自定义过滤器demo示例
Aug 24 Javascript
在vue和element-ui的table中实现分页复选功能
Dec 04 Javascript
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 jQuery
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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
python实现的简单猜数字游戏
2015/04/04 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
django rest framework serializers序列化实例
2020/05/13 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
深圳茁壮笔试题
2015/05/28 面试题
应届毕业生自荐信例文
2014/02/26 职场文书
我的理想演讲稿
2014/04/30 职场文书
推荐信模板
2014/05/09 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python