PhoneGap中文网

 找回密码
 立即注册
查看: 18537|回复: 0
打印 上一主题 下一主题

AngularJS使用$on、$emit和$broadcast在作用域之间进行交互

[复制链接]

52

主题

528

帖子

1652

积分

金牌会员

Rank: 6Rank: 6

积分
1652
跳转到指定楼层
楼主
发表于 2015-8-9 16:43:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 测试一把 于 2015-8-9 16:45 编辑

$emit只能向parent controller传递event与data( $emit(name, args) )
$broadcast只能向child controller传递event与data( $broadcast(name, args) )
$on
用于接收event与data( $on(name, listener) )


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



  1. var app = angular.module('myApp', []);
  2. app.controller('SelfCtrl', function($scope) {
  3.   $scope.click = function () {
  4.     $scope.$broadcast('to-child', 'child');
  5.     $scope.$emit('to-parent', 'parent');
  6.   }
  7. });

  8. app.controller('ParentCtrl', function($scope) {
  9.   $scope.$on('to-parent', function(event,data) {
  10.     console.log('ParentCtrl', data);       //父级能得到值
  11.   });
  12.   $scope.$on('to-child', function(event,data) {
  13.     console.log('ParentCtrl', data);       //子级得不到值
  14.   });
  15. });

  16. app.controller('ChildCtrl', function($scope){
  17.   $scope.$on('to-child', function(event,data) {
  18.     console.log('ChildCtrl', data);      //子级能得到值
  19.   });
  20.   $scope.$on('to-parent', function(event,data) {
  21.     console.log('ChildCtrl', data);      //父级得不到值
  22.   });
  23. });

  24. app.controller('BroCtrl', function($scope){
  25.   $scope.$on('to-parent', function(event,data) {
  26.     console.log('BroCtrl', data);         //平级得不到值
  27.   });
  28.   $scope.$on('to-child', function(event,data) {
  29.     console.log('BroCtrl', data);         //平级得不到值
  30.   });
  31. });
复制代码


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



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

ionic4视频教程

Archiver|手机版|小黑屋| PhoneGap中文网 ( 京ICP备13027796号-1 )  

GMT+8, 2024-12-30 03:03 , Processed in 0.062880 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表