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 相关文章推荐
用Greasemonkey 脚本收藏网站会员信息到本地
Oct 26 Javascript
加速IE的Javascript document输出的方法
Dec 02 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
Feb 28 Javascript
详解JavaScript逻辑Not运算符
Dec 04 Javascript
jquery简单倒计时实现方法
Dec 18 Javascript
TypeOf这些知识点你了解吗
Feb 21 Javascript
javascript html5摇一摇功能的实现
Apr 19 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 Javascript
Node.js中多进程模块Cluster的介绍与使用
May 27 Javascript
elementui的默认样式修改方法
Feb 23 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
Apr 17 Javascript
js canvas实现5张图片合成一张图片
Jul 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中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
php写app用的框架整理
2019/09/29 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
软件测试专业推荐信
2014/09/18 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
财务部会计岗位职责
2015/02/03 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
2015年女工委工作总结
2015/07/27 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书