我有一个带有params的ui-router状态:
.config(function config( $stateProvider ) {
$stateProvider.state( 'editor', {
url: '/{userName}/{presentationTitle}/editor',
views: {
"main": {
controller: 'EditorCtrl',
templateUrl: 'editor/editor.tpl.html'
}
},
data:{ pageTitle: 'Editor' }
});
})
状态控制器 EditorCtrl 在某个时刻使用$ broadcast来表示所涉及的指令,所有数据都已加载。
$scope.$broadcast("allDataLoaded");
当然在指令中有听众:
scope.$on("allDataLoaded", function () { do something })
第一次一切正常。然后从具有不同参数的指令中再次调用相同的状态:presentationTitle被更改。
$state.go('editor', {presentationTitle:newValue});
而这次广播并没有让我大吃一惊。 EditorCtrl代码执行,它到达$ broadcast的行,然后监听器突然没有响应。
我在这里缺少什么?
答案 0 :(得分:4)
我自己发现了这个问题。在$ $广播发生之前,第一次发生了一些异步事情,一切都很顺利。但是第二次 - 在州改变之后 - 这些并没有再次发生,因此$广播只是提前到达指令。
在$ timoutout中包装$ broadcast解决了所有问题:
$timeout(function(){
$scope.$broadcast("allDataLoaded");
});