如何在控制器之间广播消息?
以下是我的尝试:
function Ctrl1($scope) {
$scope.$broadcast('Update');
}
Ctrl1.$inject = ['$scope'];
function Ctrl2($scope) {
$scope.updated = false;
$scope.$on('Update', function () {
$scope.updated = true;
});
}
Ctrl2.$inject = ['$scope'];
要查看它正在运行:view the Plnkr。
答案 0 :(得分:1)
而不是使用$broadcast()
共享服务和$watch()
可能是更好的选择。
var myApp = angular.module('myApp', []);
myApp.factory("MyService", function () {
return {
updated: false
};
});
function Ctrl1($scope, MyService, $timeout) {
$timeout(function () { //Some work occurs and sets updated to true
MyService.updated = true;
}, 1000)
}
Ctrl1.$inject = ['$scope', "MyService", "$timeout"];
function Ctrl2($scope, MyService) {
$scope.$watch(function () {
return MyService.updated;
}, function (oldValue, newValue) {
$scope.updated = MyService.updated;
});
}
Ctrl2.$inject = ['$scope', "MyService"];
<强> Updated Plnkr 强>
答案 1 :(得分:0)
这取决于范围层次结构,因此取决于您在dom中引导Ctrl1和Ctrl2的位置。
说Ctrl1是Ctrl2的父级。 $ broadcast会将事件传输到子范围:在这种情况下,Ctrl2会注意到它(使用$ on)。
如果您需要将事件从Ctrl2传输到Ctrl1,请使用$ emit将事件传输到父范围。