我试图遵循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/

10-12 06:36