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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
JS实现的车标图片提示效果代码
Oct 10 Javascript
原生javascript实现的一个简单动画效果
Mar 30 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
Jul 05 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 Javascript
详解微信小程序调起键盘性能优化
Jul 24 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
JS立即执行函数功能与用法分析
Jan 15 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
Jul 16 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 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读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
python实现八大排序算法(2)
2017/09/14 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
Python实现网站表单提交和模板
2019/01/15 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
ipython和python区别详解
2019/06/26 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
python实现二分查找算法
2020/09/18 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
财务部经理岗位职责
2014/02/03 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
好员工观后感
2015/06/17 职场文书
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android