使用不同参数进行状态更改后,$ broadcast和$ on listener无法正常工作

时间:2014-09-23 21:56:21

标签: angularjs angularjs-directive angularjs-scope angular-ui-router

我有一个带有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的行,然后监听器突然没有响应。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

我自己发现了这个问题。在$ $广播发生之前,第一次发生了一些异步事情,一切都很顺利。但是第二次 - 在州改变之后 - 这些并没有再次发生,因此$广播只是提前到达指令。

在$ timoutout中包装$ broadcast解决了所有问题:

$timeout(function(){
    $scope.$broadcast("allDataLoaded");
});