PhoneGap中文网

标题: AngularJS使用$on、$emit和$broadcast在作用域之间进行交互 [打印本页]

作者: 你懂的    时间: 2015-8-9 16:43
标题: AngularJS使用$on、$emit和$broadcast在作用域之间进行交互
本帖最后由 测试一把 于 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








欢迎光临 PhoneGap中文网 (http://bbs.phonegap100.com/) Powered by Discuz! X3.2