如何在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
答
使用赛事转播中,我们可以一个控制器通过价值形式的另一个
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;
})
});
答
您可以轻松地实现与广播:
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'
});
});
可能重复(HTTP [什么是在AngularJS控制器之间沟通的正确方法是什么?]: //stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs) – 2015-02-11 08:39:45