当前位置: 首页 > news >正文

angularjs的$on、$emit、$broadcast

如何在作用域之间通信呢?
1.创建一个单例服务,然后通过这个服务处理所有子作用域的通信。
2.通过作用域中的事件处理通信。但是这种方法有一些限制;例如,你并不能广泛的将事件传播到所有监控的作用域中。你必须选择是否与父级作用域或者子作用域通信。

$on、$emit和$broadcast使得event、data在controller之间的传递变的简单。
$emit:子传父 传递event与data
$broadcast:父传子 child controller传递event与data
$on:监听或接收数据。。用于接收event与data

$broadcast、$emit事件必须依靠其他事件(ng-click等)进行触发,而不能单纯写一个这个。。
$on倒是可以直接写,因为它属于监听和接收数据的。


$on的方法中的event事件参数:
event.name 事件名称
event.targetScope 发出或者传播原始事件的作用域
event.currentScope 目前正在处理的事件的作用域

event.stopPropagation() 一个防止事件进一步传播(冒泡/捕获)的函数(这只适用于使用`$emit`发出的事件)
event.preventDefault() 这个方法实际上不会做什么事,但是会设置`defaultPrevented`为true。直到事件监听器的实现者采取行动之前它才会检查`defaultPrevented`的值。
event.defaultPrevented 如果调用了`preventDefault`则为true

<style>
    div{border:1px solid #ff7300;padding:20px;margin:10px;border-radius: 5px;}
</style>
<div ng-controller="ParentController"><!--父级-->
    <div  ng-click="clkP()">click--给child</div>
    <div ng-controller="OneSelfController"><!--自己-->
        <span ng-click="clkme()">click me</span>
        <div ng-controller="ChildController">
            它是OneSelfController的子级
        </div><!--子级-->
    </div>
    <div ng-controller="siblingsController">
        它与OneSelfController是平级
    </div><!--平级-->
</div>

<script>
    var app=angular.module('firstApp',[]);//app模块名
    app.controller('OneSelfController',function($scope){
        $scope.clkme=function(){
            $scope.$broadcast('sendChild','我给子控制器传递数据');
            $scope.$emit('sendParent','冒泡到父元素')
        }
    }).controller('ParentController',function($scope){
        $scope.$on('sendParent',function(event,data){//监听在子控制器中定义的 sendParent 事件
            console.log('OneSelfController传过来的',data,event.name,event);//事件名称:sendParent
        });
        $scope.clkP=function(){
            $scope.$broadcast('sendAllChild','让siblingsController接收到');
        }

    }).controller('ChildController', function($scope){
        $scope.$on('sendChild', function(event,data) {//监听在子控制器中定义的 sendChild 事件
            console.log('ChildCtrl', data,event.name,event);// 事件名称:sendChild
        });
    }).controller('siblingsController', function($scope){
        $scope.$on('sendAllChild',function(event,data) {
            console.log('值过来吧', data);
        });
        //下面事件不会触发
        $scope.$on('sendParent', function(event,data) {
            console.log('平级得不到值', data);
        });
        $scope.$on('sendChild', function(event,data) {
            console.log('平级得不到值', data);
        });
    });

</script>

 另一篇文章

http://blog.csdn.net/u014291497/article/details/52268408

相关文章:

  • Java项目相关监控与调优
  • 非对称加密(RSA、DH密钥交换算法、数字签名)
  • EFM32外设模块—USART V1.00
  • 我的第一篇博客 Javascript继承
  • manila nfs 删除 share 分析
  • atl中控件头文件所在位置
  • input标签的type为select、radio、checkbox的使用
  • matlab练习程序(makelut/applylut)
  • “图片”--预览
  • Linux整数比较
  • ios设置textField只能输入数字用于电话号码
  • 安装Mariadb常见的问题(五)
  • 入门,创建uni-app项目
  • Java中避免表单重复提交
  • uni-app中理解,区分,使用rpx单位和px单位及样式字体的导入
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [NodeJS] 关于Buffer
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Computed property XXX was assigned to but it has no setter
  • HTML5新特性总结
  • isset在php5.6-和php7.0+的一些差异
  • jQuery(一)
  • React-flux杂记
  • Redis学习笔记 - pipline(流水线、管道)
  • windows下如何用phpstorm同步测试服务器
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 后端_MYSQL
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Java数据解析之JSON
  • k8s使用glusterfs实现动态持久化存储
  • UI设计初学者应该如何入门?
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (16)Reactor的测试——响应式Spring的道法术器
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (六)激光线扫描-三维重建
  • (南京观海微电子)——I3C协议介绍
  • (转载)Linux网络编程入门
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .net FrameWork简介,数组,枚举
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net Web窗口页属性
  • .NET关于 跳过SSL中遇到的问题
  • @GlobalLock注解作用与原理解析
  • [AIGC] MySQL存储引擎详解
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Android]Android开发入门之HelloWorld
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C语言]一维数组二维数组的大小
  • [DevOps云实践] 彻底删除AWS云资源