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第一天(Jquery学习笔记)
May 11 Javascript
jQuery常用数据处理方法小结
Feb 20 Javascript
javascript 闭包详解
Jul 02 Javascript
jQuery焦点图轮播效果实现方法
Dec 19 Javascript
Vue2.0如何发布项目实战
Jul 27 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 Javascript
vue项目添加多页面配置的步骤详解
May 22 Javascript
基于layPage插件实现两种分页方式浅析
Jul 27 Javascript
JS实现简单的表格增删
Jan 16 Javascript
vue 清空input标签 中file的值操作
Jul 21 Javascript
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python上传package到Pypi(代码简单)
2016/02/06 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
11月红领巾广播稿
2014/01/17 职场文书
关于打架的检讨书
2014/01/17 职场文书
运动会演讲稿300字
2014/08/25 职场文书
出纳岗位职责
2015/01/31 职场文书
小班下学期个人总结
2015/02/12 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
SQLServer常见数学函数梳理总结
2022/08/05 MySQL