angularjs $broadcast $emit $on 事件触发controller间的值传递

使用angularjs,发现controller间的值传递,比较麻烦的,以后几篇文章会陆续说几种方法。

一,angularjs $broadcast $emit $on的处理思想

在一个controller里面通过事件触发一个方法,在方法里面通过$broadcast或$emit来定义一个变量,在父,子controller里面通过$on来获取。

二,实例说明angularjs $broadcast $emit $on的用法

1,html代码

查看复制打印?

  1. <div ng-controller="ParentCtrl">                  //父级
  2. <div ng-controller="SelfCtrl">                //自己
  3. <a ng-click="click()">click me</a>
  4. <div ng-controller="ChildCtrl"></div>     //子级
  5. </div>
  6. <div ng-controller="BroCtrl"></div>           //平级
  7. </div>

2,js代码

查看复制打印?

  1. phonecatControllers.controller(‘SelfCtrl‘, function($scope) {
  2. $scope.click = function () {
  3. $scope.$broadcast(‘to-child‘, ‘child‘);
  4. $scope.$emit(‘to-parent‘, ‘parent‘);
  5. }
  6. });
  7. phonecatControllers.controller(‘ParentCtrl‘, function($scope) {
  8. $scope.$on(‘to-parent‘, function(d,data) {
  9. console.log(data);         //父级能得到值
  10. });
  11. $scope.$on(‘to-child‘, function(d,data) {
  12. console.log(data);         //子级得不到值
  13. });
  14. });
  15. phonecatControllers.controller(‘ChildCtrl‘, function($scope){
  16. $scope.$on(‘to-child‘, function(d,data) {
  17. console.log(data);         //子级能得到值
  18. });
  19. $scope.$on(‘to-parent‘, function(d,data) {
  20. console.log(data);         //父级得不到值
  21. });
  22. });
  23. phonecatControllers.controller(‘BroCtrl‘, function($scope){
  24. $scope.$on(‘to-parent‘, function(d,data) {
  25. console.log(data);        //平级得不到值
  26. });
  27. $scope.$on(‘to-child‘, function(d,data) {
  28. console.log(data);        //平级得不到值
  29. });
  30. });

3,点击Click me的输出结果

  1. child
  2. parent

用$broadcast赋的值,只能子级得到值;$emit赋的值,只能父级得到;而平级的什么都不能得到。

时间: 2024-08-03 19:22:29

angularjs $broadcast $emit $on 事件触发controller间的值传递的相关文章

通过$broadcast或$emit在子级和父级controller之间进行值传递

1 通过$broadcast或$emit在controller之间进行值传递,不过这些controller必须是子级或者父级关系, 2 $emit只能向父级parent controller传递事件event与数据data,$broadcast只能向子级child controller传递event与data,$on用于接收event与data. 3 <script> 4 var myapp=angular.module('myapp',[]); 5 myapp.controller('Sel

Chrome调试本地文件无法使用window.opener对象进行窗口间值传递

今天在百度BAE上建了个应用,svn上传后发现页面间互调有些问题,几经查询发现: (1)IE下正常的window.opener.object1.object2页面间对象访问方法在Chrome下不能使用,修改为window.opener.document.getElementById('object2')解决问题: (2)Chrome调试本地网页文件时无法使用window.opener对象访问父窗口内的对象,也就无法实现窗口间的值传递.

网络事件触发自己主动登录

通过接收REACHABILITY_RECOVE_NOTIFICATION通知来获取网络状态.可是在弱网络下可能出现收不到通知的情况,iphone 4s有时候也出现收不到网络通知的情况.其他90%以上的情况都能收到网络通知. 登录时能够依据该通知来触发自己主动登录.防止没有收到网络通知就登录,导致登录失败,不能显示正常网络提示:也避免了起定时器等待一段时间在登录的不及时及耗电量问题(起线程非常费电). 而且用停止网络检查立马启动网络检查会出现.收到两次网络正常通知(若网络正常的情况下) :[g_r

网络事件触发自动登录

通过接收REACHABILITY_RECOVE_NOTIFICATION通知来获取网络状态,但是在弱网络下可能出现收不到通知的情况,iphone 4s有时候也出现收不到网络通知的情况,其它90%以上的情况都能收到网络通知. 登录时可以根据该通知来触发自动登录,防止没有收到网络通知就登录,导致登录失败,不能显示正常网络提示:也避免了起定时器等待一段时间在登录的不及时及耗电量问题(起线程很费电).并且用停止网络检查立刻启动网络检查会出现,收到两次网络正常通知(若网络正常的情况下) :[g_reach

Android Activity 和 ViewGroup中事件触发和传递机制

1.在只有Activity的情况: 1)Touch事件触发流程: 首先触发dispatchTouchEvent 然后触发onUserInteraction 再次onTouchEvent 如果是点击的话,紧跟着下列事件(点击分俩步,ACTION_DOWN,ACTION_up) 触发dispatchTouchEvent 再次onTouchEvent 当ACTION_up事件时不会触发onUserInteraction(可查看源代码) 2)键盘事件触发流程 首先触发dispatchKeyEvent 然

Spring MVC controller间跳转 重定向 传参 (转)

鸣谢:http://blog.sina.com.cn/s/blog_a85398ce0101f93x.html 1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 2. 解决办法 需求有了肯定是解决办法了,一一解决,说明下spring的跳转方式很多很多,我这里只是说一些自我认为好用的,常用的,spring分装的一些类和方法. (1)我在后台一个controller跳转到另一个

MVC中Controller间的传值、Controller到View的传值方法

从做了考试以来,和别人也进行了交流,发现系统内部的传值算是一个比较费劲的问题.这篇博客讲解两种传值的情况--MVC中Controller间的传值,这里包括了第二种Controller到View的传值. 示例:我有两个Controller:C1和C2,我想把C1中的课程实体的课程ID传到C2中.方案是先把C1中的课程ID传到C2对应的View页面的地址栏中,然后C2从自己的View页面中获取. 来看代码: //下面是一个easyUI的表格,执行ScoringManagementCotroller下

C#事件触发机制

C#的事件触发机制,类似于c++的回调函数机制 我先简单说一下,委托和事件的实质,后期再重开一篇博文来详细说 委托:指向方法的指针,类似于C的函数指针 事件:是一个可以存放0个或多个方法指针的数据结构  .......... 在一次编译后会为其生成一个类等等的就以后另开博文说了 看看触发机制 方便理解,来个通俗一点的图 事件触发源类 class cclass { private char i; public delegate void ichanged(cclass s); public eve

U3D Trigger事件触发

使用Trigger事件触发,可以达到虽然触发了,可是不改变任何效果. 这个是进入时候触发的: void OnTriggerEnter2D(Collider2D other) { print (other.transform.name); } 退出触发: void OnTriggerExit2D(Collider2D other) { print (other.transform.name + "-----"); } 停留时触发: void OnTriggerStay2D(Collide