我试图遵循Angular创作者Vojta提供的this示例。但是,我似乎无法使发射正常工作。
这是我的小提琴:http://jsfiddle.net/nopctoday/fp2y3jur/2/
<div ng-module="myapp">
<div ng-controller="ControllerZero">
<button ng-click="pass_data()">BROADCAST</button>
</div>
<div ng-controller="ControllerOne">
{{data}}
</div>
</div>
和简单的js
var myModule = angular.module('myapp', []);
app.controller('ControllerZero',['$scope',function($scope){
$scope.pass_data = function() {
$scope.$emit('broadcasting', 'it succeeded!');
};
}]);
app.controller('ControllerOne',['$scope', function($scope){
$scope.data = "";
$scope.$on('broadcasting', function(event, data) {
$scope.data = data;
});
}]);
最佳答案
$emit
使事件沿作用域层次结构(包括当前作用域)向上扩展。$broadcast
将事件向下发送到范围层次结构,包括当前范围。
在您的情况下,ControllerZero
的范围和ControllerOne
的范围是同级,因此$scope.$emit
不会达到同级范围。
根据您打算吸引的收听者的种类,您可以执行以下操作:
#1
$scope.$root.$emit("eventName", ...); // or $rootScope
将覆盖
$rootScope
的听众:$rootScope.$on("eventName", ...)
或者,#2,您可以从根目录广播:
$scope.$root.$broadcast("eventName", ...)
将会覆盖所有听众
$scope.$on("eventName", ...)
关于javascript - 跨 Controller 发射数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29570757/