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

$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事件参数,其对象的属性和方法如下

原文地址:https://www.cnblogs.com/coding4/p/5582471.html