【问题标题】:Angular Broadcast not working角广播不起作用
【发布时间】:2015-11-23 07:30:24
【问题描述】:

我无法广播到其他控制器,因为我没有父子关系,因此使用 $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);
    });
}

【问题讨论】:

  • 在通过作用域进行广播时,我还要求您检查控制器到控制器对话的服务。另外,我认为 $scope.$on('serverUpdated' 会是比 $rootScope.$on('serverUpdated' 更好的选择。

标签: angularjs broadcast angularjs-rootscope


【解决方案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);

它应该可以按您的预期工作。

【讨论】:

  • tick() 是在指定时间后自动执行的轮询函数,如果我把它放在外面,那么轮询就会停止。
  • 如果是这样,您应该使用 $interval service 。我现在修改代码。
  • 已编辑,不要忘记在您的控制器中注入 $interval 服务。
  • 最好将整个轮询逻辑包装在一个服务中,使用特定的方法 start、stop、setInterval 等。
  • 间隔有效,但广播仍然无效。 serverManageController 没有监听,我认为 serverManageController 在广播时没有实例化。
猜你喜欢
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多