2015-11-23 36 views
2

因为我没有父母关系,所以我无法向其他控制器广播,因此使用$ rootScope将更改广播到其他控制器。角广播不起作用

请帮我找出代码中的问题。

function serverController(server, $state, $rootScope, $timeout) 
{ 
    var vm = this; 
    vm.loader = false; 

    (function tick() { 
     server.setRootScope().then(
      function(response){ 
       angular.forEach(response.data, function (val) { 
        val['serverState'] = (val.status == 'running')?true:false; 
        $rootScope.servers[val.id] = val; 
       }); 
       vm.servers = $rootScope.servers; 
       $rootScope.$broadcast('serverUpdated', [1,2,3]); 
       console.log('serverUpdated', [1,2,3]); 
      } 
     ); 

     $timeout(tick, 25000); 
    })(); 
} 


function serverManageController(server, $state, $rootScope, $stateParams) 
{ 
    var vm = this; 
    $rootScope.$on('serverUpdated', function(event, mass) { 
     console.log('serverUpdated'); 
     console.log(mass); 
    }); 
} 
+0

通过范围广播工作时,我还会要求您查看控制器到控制器通话的服务。此外,$ scope。$ on('serverUpdated'将是更好的选择,然后是$ rootScope。$ on('serverUpdated'我认为。 – TheRodeo

回答

1

修改像这样的滴答功能。

function tick() { 
    server.setRootScope().then(
     function(response){ 
      angular.forEach(response.data, function (val) { 
       val['serverState'] = (val.status == 'running')?true:false; 
       $rootScope.servers[val.id] = val; 
      }); 
      vm.servers = $rootScope.servers; 
      $rootScope.$broadcast('serverUpdated', [1,2,3]); 
      console.log('serverUpdated', [1,2,3]); 
     } 
    ); 
    }; 

$timeout(function(){ 
    $interval(tick, 25000); 
},2000); 

它应该按照您的预期工作。

+0

tick()是极化函数,它会在指定时间后自动执行,如果我把这个外部那么poling就会停止 – Sam

+0

如果是这样,你应该使用$ interval服务,我现在修改代码 – Ashot

+0

编辑并且不要忘记在你的控制器中注入$ interval服务 – Ashot