$on、$emit和$broadcast使得event、data在controller之间的传递变的简单。
$emit只能向parent controller传递event与data $broadcast只能向child controller传递event与data $on用于接收event与data
转载:http://www.it165.net/pro/html/201404/12610.html
这个我测试了一下,只要$emit和$broadcast 发射,$on就可以立刻接受到的。
不过用的是$scope 发射和接受。
emit(name,data)向父control发射的。
而broadcast(name,data)是向子control发射的。
?不知道可以扩control想爸爸的爸爸发射呢,没有试过
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><br>
js的代码
1 app.controller('SelfCtrl', function($scope) { 2 $scope.click = function () { 3 $scope.$broadcast('to-child', 'child'); 4 $scope.$emit('to-parent', 'parent'); 5 } 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 17 app.controller('ChildCtrl', function($scope){ 18 $scope.$on('to-child', function(event,data) { 19 console.log('ChildCtrl', data); //子级能得到值 20 }); 21 $scope.$on('to-parent', function(event,data) { 22 console.log('ChildCtrl', data); //父级得不到值 23 }); 24 }); 25 26 app.controller('BroCtrl', function($scope){ 27 $scope.$on('to-parent', function(event,data) { 28 console.log('BroCtrl', data); //平级得不到值 29 }); 30 $scope.$on('to-child', function(event,data) { 31 console.log('BroCtrl', data); //平级得不到值 32 }); 33 });
最终结果
ParentCtrl child
ChildCtrl parent
$emit和$broadcast可以传多个参数,$on也可以接收多个参数。
在$on的方法中的event事件参数,其对象的属性和方法如下