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 相关文章推荐
脚本收藏iframe
Jul 21 Javascript
淘宝搜索框效果实现分析
Mar 05 Javascript
网页运行时提示对象不支持abigimage属性或方法
Aug 10 Javascript
jQuery on方法传递参数示例
Dec 09 Javascript
JQuery右键菜单插件ContextMenu使用指南
Dec 19 Javascript
AngularJS 2.0新特性有哪些
Feb 18 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
使用vue2.0创建的项目的步骤方法
Sep 25 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
Oct 09 Javascript
JavaScript组合模式---引入案例分析
May 23 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中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
提高网站信任度的技巧
2008/10/17 Javascript
js导出txt示例代码
2014/01/14 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
vue组件间通信解析
2017/03/01 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
Python如何获取系统iops示例代码
2016/09/06 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
服装厂厂长岗位职责
2013/12/27 职场文书
校园广播稿500字
2014/02/04 职场文书
合作意向协议书范本
2014/03/31 职场文书
我的祖国演讲稿
2014/05/04 职场文书
青年标兵事迹材料
2014/08/16 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
死亡赔偿协议书
2015/01/28 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
办公室管理规章制度
2015/08/04 职场文书
导游词之丽江普济寺
2019/10/22 职场文书