Javascript AngularJS计时-如何使子范围看到父';s$在init上广播?

Javascript AngularJS计时-如何使子范围看到父';s$在init上广播?,javascript,angularjs,broadcast,timing,Javascript,Angularjs,Broadcast,Timing,当我的应用程序启动时,有一个主模板控制器和一个子模板控制器。路线是这样的 #/history/?q=someQuery 主模板控制器在初始化时执行此操作 $rootScope.$broadcast('searchQueryChanged', $location.search().q); 子控制器执行此操作 $scope.$on('searchQueryChanged', function(e, sQuery){ console.log(sQuery); }); 我可以通过日志记录看到子

当我的应用程序启动时,有一个主模板控制器和一个子模板控制器。路线是这样的

#/history/?q=someQuery
主模板控制器在初始化时执行此操作

$rootScope.$broadcast('searchQueryChanged', $location.search().q);
子控制器执行此操作

$scope.$on('searchQueryChanged', function(e, sQuery){
  console.log(sQuery);
});

我可以通过日志记录看到子控制器在主模板控制器之前初始化。所以理论上它应该对广播做出反应,但事实并非如此。有没有关于我在这里可能做错了什么以及如何修复它的想法

这是一个很容易解决的问题。只是又挖了一点。我在初始数据加载的.then()函数中注册了$on(),这当然会延迟加载

您可以使用$timeout provider来确保您的$broadcast是angular生命周期中执行的最后一件事:

$timeout(function(){
  $scope.$broadcast('searchQueryChanged', $location.search().q);
}, 0);

如果共享服务不起作用,请尝试使用该服务。在父控制器路由中使用abstract=true作为属性。。