当我的应用程序启动时,有一个主模板控制器和一个子模板控制器。路线看起来像这样......
#/history/?q=someQuery
主模板控制器在init ...上执行此操作
$rootScope.$broadcast('searchQueryChanged', $location.search().q);
子控制器执行此操作...
$scope.$on('searchQueryChanged', function(e, sQuery){
console.log(sQuery);
});
我可以通过记录看到子控制器在主模板控制器之前初始化。所以理论上它应该响应广播,但它并没有。关于我在这里做错了什么以及如何解决它的任何想法?
答案 0 :(得分:2)
您可以使用$ timeout提供程序来确保您的$ broadcast是在角度生命周期中执行的最后一件事:
$timeout(function(){
$scope.$broadcast('searchQueryChanged', $location.search().q);
}, 0);
答案 1 :(得分:0)
这是一个简单的解决方案。刚加了一点挖掘。我在初始数据加载的.then()函数中注册$ on(),这当然会延迟它。