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 相关文章推荐
图片自动缩小 点击放大
Jul 07 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
JS清空多文本框、文本域示例代码
Feb 24 Javascript
javascript实现window.print()去除页眉页脚
Dec 30 Javascript
javascript弹出窗口中增加确定取消按钮
Jun 24 Javascript
JS实现获取word文档内容并输出显示到html页面示例
Jun 23 Javascript
移动端(微信等使用vConsole调试console的方法
Mar 05 Javascript
JavaScript 作用域scope简单汇总
Oct 23 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 Javascript
JS实现随机点名器
Apr 12 Javascript
ES2020系列之空值合并运算符 '??'
Jul 22 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
python sort、sorted高级排序技巧
2014/11/21 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
python创建文件备份的脚本
2018/09/11 Python
详解python配置虚拟环境
2019/04/08 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
Python 实现自动导入缺失的库
2019/10/29 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
艺术专业大学生自我评价
2013/09/22 职场文书
工作保证书范文
2014/04/29 职场文书
会议接待欢迎标语
2014/10/08 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
英语导游欢迎词
2015/09/30 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript