AngularJS计时 - 如何让子范围看到父在init上的广播?

时间:2015-05-11 17:13:25

标签: javascript angularjs broadcast timing

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

#/history/?q=someQuery

主模板控制器在init ...上执行此操作

$rootScope.$broadcast('searchQueryChanged', $location.search().q);

子控制器执行此操作...

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

我可以通过记录看到子控制器在主模板控制器之前初始化。所以理论上它应该响应广播,但它并没有。关于我在这里做错了什么以及如何解决它的任何想法?

2 个答案:

答案 0 :(得分:2)

您可以使用$ timeout提供程序来确保您的$ broadcast是在角度生命周期中执行的最后一件事:

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

答案 1 :(得分:0)

这是一个简单的解决方案。刚加了一点挖掘。我在初始数据加载的.then()函数中注册$ on(),这当然会延迟它。