从AngularJS中的socket.io获取变量

从AngularJS中的socket.io获取变量,angularjs,socket.io,angularjs-scope,angularjs-service,angularjs-controller,Angularjs,Socket.io,Angularjs Scope,Angularjs Service,Angularjs Controller,基本上我有两个数据源,一个是来自socket.io的实时数据,另一个是json对象。我在前端使用这两种方法,但问题是我需要将一个变量从socket.io传递到json解析器: 此控制器适用于我的视图: .controller('mainCtrl', ['$scope','socket','currentData', function($scope, socket, currentData){ // It's updated every 2 seconds soc

基本上我有两个数据源,一个是来自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对象,我需要在初始化时计算它并将数据传递给视图

有什么解决办法吗


谢谢。

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

将对JSON服务的调用移动到回调上的
。将其放在仅当初始化变量设置为
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;
        }
    });
}])