Javascript 广播事件和on不在正常工作

Javascript 广播事件和on不在正常工作,javascript,angularjs,Javascript,Angularjs,我试图从一个控制器生成一个广播事件,并在另一个控制器上收听它。但是结果不会显示在DOM上,尽管没有错误。当我从两个控制器显示普通$scope变量时,它也在工作。只是广播和on不起作用,因为没有错误,所以我无法调试 oneApp.controller("twoController",["$log","$scope","$rootScope",function($log,$scope,$rootScope){ var str ="sent from twoController "; $scope.h

我试图从一个控制器生成一个广播事件,并在另一个控制器上收听它。但是结果不会显示在DOM上,尽管没有错误。当我从两个控制器显示普通$scope变量时,它也在工作。只是广播和on不起作用,因为没有错误,所以我无法调试

oneApp.controller("twoController",["$log","$scope","$rootScope",function($log,$scope,$rootScope){
var str ="sent from twoController ";
$scope.hey = 215;
$rootScope.$broadcast("hey",str);

}])

oneApp.controller("twoChildController",    ["$log","$scope","$rootScope",function($log,$scope,$rootScope){
//var str ="sent from twoController ";
//$scope.display = str;
$scope.$on("hey",function(event,str){
$scope.display = str;
});

}])

有人能帮我解决这个问题吗?

在这种情况下,controller1先启动,然后controller2启动。当控制器1启动的广播事件发生且控制器2尚未启动时,即$on尚未注册。您可以使用$timeout

var-app=angular.module(“myApp”,[]);
//控制器声明
app.controller('myCtrl1',函数($scope、$rootScope、$timeout){
$scope.name=“罗杰”;
$timeout(函数(){
$rootScope.$broadcast('hey',$scope.name);
});      
});
app.controller('myCtrl2',函数($scope,$rootScope){
$scope.$on('hey',函数(事件,名称){
$scope.name=名称;
});
});

myCtrl1:{{name}
myCtrl2:{{name}
以给定的方式尝试:

在一些主控制器中定义所有广播,如:

$rootScope.broadcast.actions = {
        hey : 'hey'
        //all broadcast
}
$rootScope.$broadcast($rootScope.broadcast.actions.hey,{str});
$scope.$on($rootScope.broadcast.actions.hey, function (event,str){
    $scope.display = str;
});
广播发送:

$rootScope.broadcast.actions = {
        hey : 'hey'
        //all broadcast
}
$rootScope.$broadcast($rootScope.broadcast.actions.hey,{str});
$scope.$on($rootScope.broadcast.actions.hey, function (event,str){
    $scope.display = str;
});
广播接收:

$rootScope.broadcast.actions = {
        hey : 'hey'
        //all broadcast
}
$rootScope.$broadcast($rootScope.broadcast.actions.hey,{str});
$scope.$on($rootScope.broadcast.actions.hey, function (event,str){
    $scope.display = str;
});

尝试
$scope.$parent.$broadcast(“嘿,str”)
可以从函数参数$on中删除
事件
参数。是否调用回调函数$scope.$on中的函数?您可以使用console.log(“调用回调”)来检查这一点;请检查并告诉我们控制台中是否显示日志。谢谢。这正是问题所在:)它现在起作用了,谢谢。只是一个小小的疑问,当我们毫不延迟地使用$timeout服务时会发生什么?它是否立即超时并调用回调函数?$timeout将您的工作放入队列,在当前摘要周期后运行。是的,我知道我只是想知道我们提供的时间,当我们不提供任何内容时会发生什么