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事件參數,其對象的屬性和方法如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM