如何在AngularJS中相互沟通控制器?

如何在AngularJS中相互沟通控制器?

问题描述:

我在写一个控制器。该控制器必须与其他控制器通信。但我不知道它是否可行?如何在AngularJS中相互沟通控制器?

HTML:

<div data-ng-app="TestApp"> 
<div data-ng-controller="menuCtrl"> 
    <ul> 
     <li> <a data-ng-click="Click()"> 
      Menü1</a> 
     </li> 
    </ul> 
</div> 
<div data-ng-controller="pageCtrl"> 
    <hr/> 
    <button data-ng-click="getText()">GetText</button> 
    <br/> 
    <strong data-ng-model="boldText"> {{boldText}}</strong> 
</div> 

JS:

var app = angular.module('TestApp', []); 

app.controller('menuCtrl', function ($rootScope, $scope) { 
    $scope.Click = function() { 
    //??? 
    }; 
}) 
.controller('pageCtrl', function ($rootScope, $scope) { 

    $scope.getText = function() { 
     $scope.boldText = 'tst'; 
    }; 
}); 

我修好样品上的jsfiddle:sample

+0

可能重复(HTTP [什么是在AngularJS控制器之间沟通的正确方法是什么?]: //stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs) – 2015-02-11 08:39:45

使用赛事转播中,我们可以一个控制器通过价值形式的另一个

app.controller('menuCtrl', function ($rootScope, $scope) { 
    $scope.Click = function() { 
     var valueToPass = "value"; 
     $rootScope.$broadcast('eventMenuCtrl', valueToPass); 
    }; 
}) 
.controller('pageCtrl', function ($rootScope, $scope) { 

    $scope.getText = function() { 
     $scope.boldText = 'tst'; 
    }; 

    $scope.$on('eventMenuCtrl', function(event, value) { 
     $scope.boldText = value; 
    }) 
}); 

http://jsfiddle.net/q2yn9jqv/4/

您可以轻松地实现与广播:

var app = angular.module('TestApp', []); 

app.controller('menuCtrl', function ($rootScope, $scope) { 
    $scope.Click = function() { 
     $scope.$broadcast('MyClickEvent', { 
      someProp: 'Clicking data!' // send whatever you want 
     }); 

    }; 
}) 

.controller('pageCtrl', function ($rootScope, $scope) { 

    $scope.getText = function() { 
     $scope.boldText = 'tst'; 
    }; 
    $scope.$on('MyClickEvent', function (event, data) { 
     console.log(data); // 'Data to send' 
    }); 
});