【问题标题】:Getting variable from socket.io in AngularJS从 AngularJS 中的 socket.io 获取变量
【发布时间】:2014-06-01 08:07:49
【问题描述】:

基本上我有两个数据源,一个是来自 socket.io 的实时数据,另一个是 json 对象。而且我在前端都使用了这两种方法,但问题是我需要将一个变量从 socket.io 传递给 json 解析器:

我认为这个控制器:

.controller('mainCtrl', ['$scope','socket','currentData', function($scope, socket,         currentData){

    // It's updated every 2 seconds
    socket.on('chnl', function(data){
         // Passed to view OK
         $scope.realtimeData = data;

         // And i need to pass this to currentData.
         $scope.foo = data.foo;
    });

    // Here i'm getting json response from factory which is computed based on socket.io foo variable and then passed to view. 
    currentData.get().then(function(data){
         if($scope.foo)...
         ...
         $scope..
    });


}]

问题是我尝试过的任何东西我最终都在每个传入的 socket.io 包上调用 json 对象,我需要在它的初始化时计算它并将数据传递给视图。

有什么解决办法吗?

谢谢。

【问题讨论】:

    标签: angularjs socket.io angularjs-scope angularjs-service angularjs-controller


    【解决方案1】:

    如果您只需要运行一次以进行初始化...

    将对 JSON 服务的调用移至 .on 回调中。将它放在一个仅在初始化变量设置为false 时运行的条件中。设置数据后,将该变量切换为true,使其不再运行:

    .controller('mainCtrl', ['$scope','socket','currentData', function($scope, socket, currentData){
        $scope.fooInit = false;
    
        socket.on('chnl', function(data){
            $scope.realtimeData = data;
            $scope.foo = data.foo;
    
            if (!$scope.fooInit) {
                currentData.get().then(function(data){
                    if($scope.foo)...
                     ...
                    $scope..
                });
                $scope.fooInit = true;
            }
        });
    }])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2015-08-08
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多