AngularJS的学习--$on、$emit和$broadcast的使用

来源:http://www.cnblogs.com/CraryPrimitiveMan/p/3679552.html

AngularJS中的作用域有一个非常有层次和嵌套分明的结构。其中它们都有一个主要的$rootScope(也就说对应的Angular应用或者ng-app),然后其他所有的作用域部分都是继承自这个$rootScope的,或者说都是嵌套在主作用域下面的。很多时候,你会发现这些作用域不会共享变量或者说都不会从另一个原型继承什么。

那么在这种情况下,如何在作用域之间通信呢?其中一个选择就是在应用程序作用域之中创建一个单例服务,然后通过这个服务处理所有子作用域的通信。

在AngularJS中还有另外一个选择:通过作用域中的事件处理通信。但是这种方法有一些限制;例如,你并不能广泛的将事件传播到所有监控的作用域中。你必须选择是否与父级作用域或者子作用域通信。

$on、$emit和$broadcast使得event、data在controller之间的传递变的简单。

  • $emit只能向parent controller传递event与data
  • $broadcast只能向child controller传递event与data
  • $on用于接收event与data

例子如下

html代码

复制代码
<div ng-controller="ParentCtrl">                <!--父级--><div ng-controller="SelfCtrl">              <!--自己--><a ng-click="click()">click me</a><div ng-controller="ChildCtrl"></div>   <!--子级--></div><div ng-controller="BroCtrl"></div>         <!--平级-->
</div>
复制代码

js代码

复制代码
app.controller('SelfCtrl', function($scope) {$scope.click = function () {$scope.$broadcast('to-child', 'child');$scope.$emit('to-parent', 'parent');}
});app.controller('ParentCtrl', function($scope) {$scope.$on('to-parent', function(event,data) {console.log('ParentCtrl', data);       //父级能得到值});$scope.$on('to-child', function(event,data) {console.log('ParentCtrl', data);       //子级得不到值});
});app.controller('ChildCtrl', function($scope){$scope.$on('to-child', function(event,data) {console.log('ChildCtrl', data);         //子级能得到值});$scope.$on('to-parent', function(event,data) {console.log('ChildCtrl', data);         //父级得不到值});
});app.controller('BroCtrl', function($scope){  $scope.$on('to-parent', function(event,data) {  console.log('BroCtrl', data);          //平级得不到值  });  $scope.$on('to-child', function(event,data) {  console.log('BroCtrl', data);          //平级得不到值  });  
});
复制代码

最终结果

ParentCtrl child

ChildCtrl parent

 

$emit和$broadcast可以传多个参数,$on也可以接收多个参数。

 

在$on的方法中的event事件参数,其对象的属性和方法如下

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

 

 

 

转载于:https://www.cnblogs.com/yansjhere/p/4044041.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

17、【 商品管理模块开发】——后台商品图片的springmvc和富文本上传以及ftp文件服务器的开发...

1、FTP文件服务器的搭建&#xff1a; 软件下载&#xff1a;ftpserver&#xff1b; image.png浏览器访问&#xff1a;ftp://127.0.0.1/image.png点击任意一个文件&#xff0c;就可以看到我们图片啦&#xff0c;前提是前面指定的目录里面有图片文件~ image.png2、接口编写&#x…

我们常说……

从过完元旦到现在&#xff0c;乖乖在公司办公的时间很少&#xff0c;好多时候都是在外地&#xff0c;或者是在路上、车上。有n多次&#xff0c;乖乖一天至少坐6个小时的车&#xff0c;回到家里都是带着一身的疲惫&#xff0c;虽然他并不表现出来&#xff0c;但是因为长时间坐车…

那些油管上高质量的学习编程的频道 之一

国内确实有很多不错的学习编程的网站或者个人博客&#xff0c;但是对于初学者&#xff0c;往往更希望获得那种引导性的教学&#xff1a;即一步一步的教你跟着操作的教学。这种教学最好的方式当然就是视频了。毕竟在Apple Podcast上超火爆的斯坦福教授iOS开发的课程也是这种形式…

SQL Server 2005 Express附加(Attach)的数据库为“只读”的解决方法

我的操作系统为Windows 2003 Server , 文件系统NTFS, 在SQL Server 2005 Express 上附加(Attach)从另外一台电脑Copy过来的数据库后&#xff0c;数据库为“只读”。如下图&#xff1a; 解决办法&#xff1a; 打开 SQL Server Configuration Manager, 打开SQL Server SQLEXPRESS…

[导入]blog年终小结

1. 2006-11-30 注册了本域名thws.cn&#xff0c;喜欢的thw.com被注册了&#xff0c;只好退而就其次了&#xff1b;2. 12-20在alexa上登陆站点&#xff0c;综合排名从起初490多万上升到现在的590327,下期566,880&#xff1b;3. 2007-1-11适逢google PR更新&#xff0c;PR值从0变…

Maven学习笔记(2) --mvn archetype:create 说明

前面一篇相对比较简单。 看完前面的内容我们会来到实战部分&#xff0c;也就是创建一个简单的项目 1 mvn archetype:create -DgroupIdorg.sonatype.mavenbook.ch03 \ 2 -DartifactIdsimple \ 3 -DpackageNameorg.sonatype.mavenbook 于是我们得到了步入Maven领域的第一份打击 真…

单点登录(sso)入门

单点登录的英文名叫做Single Sign On&#xff0c;简称SSO。 在以前&#xff0c;一般我们就单系统&#xff0c;所有的功能都在同一个系统上。 后来&#xff0c;我们为了合理利用资源和降低耦合性&#xff0c;于是把单系统拆分成多个子系统。 比如阿里系的淘宝和天猫&#xff0c;…

Cocopods的升级错误解决

2019独角兽企业重金招聘Python工程师标准>>> 写在前面&#xff1a; 这篇笔记的由来&#xff0c;是因为在这个周五下班后想起了之前 GitHub 上一个关于 iOS Charts 的 demo 仍处于未完待续的状态。便想着完成了它&#xff0c;遂打开了该工程&#xff0c;开始用 pod 更…

XML 命名空间以及它们如何影响 XPath 和 XSLT (Extreme XML)

Dare Obasanjo Microsoft Corporation 2002 年 5 月 20 日 本文是有望长期发表的系列文章的第一篇&#xff0c;这些文章专门阐释由 Microsoft 支持的 W3C XML 技术的更微妙的内容。尽管 XML 的核心仍相当简单&#xff0c;但是围绕它的技术已经变得日益复杂&#xff0c;而且其中…

走马观花:Visual Studio Code Name Orcas Mar07CTP /体验DLINQ

不知道什么叫“Orcas”&#xff1f;简单说应该就是下一版本的Visual Studio 吧。现在atlas&#xff0c;LINQ&#xff0c;WF之类东西&#xff0c;对于VS2005是单独安装的&#xff0c;Orcas应该是全内置吧。还有很多功能的增强&#xff0c;可以参考英文说明。闲话不说&#xff0c…

[导入]C#实现Des加密和解密

文章来源:http://blog.csdn.net/21aspnet/archive/2007/03/24/1540018.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2007/03/25/816385.html

帆软报表(finereport)图表钻取详细类别 当前页对话框展示

添加参数栏&#xff0c;季度下拉框的控件命名为 jd 这里添加雷达图做案例 编辑→特效→ 添加JavaScript 参数&#xff1a;wd 值&#xff1a;分类名 #取雷达图所点击的点 参数&#xff1a;jd 值&#xff1a;公式$jd #取参数下拉所选参数 JavaScript详细: var if…

大数据之MySql笔记-0916

2019独角兽企业重金招聘Python工程师标准>>> 复习: 1.MySQL部署 拓展题: rm -rf $MYSQL_HOME/arch/* binlog日志 恢复 主从同步 rm -rf $MYSQL_HOME/data/* 数据 $MYSQL_HOME/scripts/mysql_install_db \ --usermysqladmin \ --basedir/usr/local/mysql \ --dat…

Sql Server设置用户只能查看并访问特定数据库

1.新建登录用户 以管理员身份登陆数据库&#xff08;权限最高的身份如sa&#xff09;&#xff0c;点击安全性->登录名&#xff0c;右键新建登录名&#xff0c;输入登录名和密码&#xff0c;取消强制实施密码策略。 2.将服务器角色设置为public 注意&#xff1a;很重要的一…

arcgis jsapi接口入门系列(6):样式

2019独角兽企业重金招聘Python工程师标准>>> symbol: function () {//线样式//样式详情请看官方文档let style {//线颜色&#xff0c;支持多种格式&#xff1a;//CSS color string&#xff1a;例如"dodgerblue";//HEX&#xff1a;例如"#33cc33"…

ORM(四)应用.脚本管理工具

ORM(四)应用.脚本管理工具数据脚本的维护,不知道各位有什么好的工具推荐没有,由于以前一直是用手工来进行脚本的维护操作,很麻烦,而且容易出错.大多数时候,都在原来的基础上进行直接修改.今天有点时间就完成了一个简陋的工具,也是对ORM组件的应用.下面是程序的运行界面http://f…

OpenCV2:应用篇 三维重建

一.简介 VTK(Visualization Toolkit):开源三维图形库 ITK(Insight Segmentation and Registration Toolkit):开源医学图像处理库,包含医学算法和支持医学图片格式DICOM QT:用户图形界面 转载于:https://www.cnblogs.com/k5bg/p/11232131.html

手把手教你搭建Mac环境微信小程序的本地测试服务器

问题的提出 Mac环境方便快捷地搭建小程序的测试服务器 小程序对于网络请求的URL的特殊要求 不能出现端口号不能用localhost必须用https主要步骤 用json-server搭建简单的服务器&#xff0c;搭建出来的服务器地址为localhonst:3000安装nginx进行反向代理&#xff0c;以便隐藏端口…

log4j.xml引用Javaweb项目中配置文件的参数

2019独角兽企业重金招聘Python工程师标准>>> 由于最近用阿里云日志服务整合log4j&#xff0c;在配置com.aliyun.openservices.log.log4j.LoghubAppender需要设置一些参数&#xff0c;因为项目中有统一的配置文件&#xff0c;所以想要可以直接在log4j.xml中通过${}来…

砂 即懒且忙 只有随笔

B同学说&#xff1a;砂&#xff0c;你已经好久没更新你的博了。是啊&#xff0c;我即懒且忙。上周六爬了青云山&#xff0c;公司组织的。一直懒得处理照片。拍了将近300张的照片&#xff0c;可到现在也就才弄了那么几张。我自恋。照片是自拍的。娘说&#xff1a;天呐&#xff0…