2015-02-06 2 views
1

내 서버 응답을 기반으로 매 초마다 내 뷰를 업데이트하려고합니다. 실시간 데이터 표시 응용 프로그램으로 작업하고 있습니다. 매초마다 서버에 요청을 보내고 응답을 받고 내보기에 표시해야합니다. 현재 요청 및 응답 jquery 및 아약스 사용하고 있습니다. 컨트롤러에서 anglejs 서비스를 반복적으로 호출하여 뷰를 업데이트하는 방법

그냥 지금은 AngularJS와를 사용하려고하고 서버에서 응답을 얻기 위해 우는 코드를 사용,

'use strict'; 

angular.module('liverate', ['dataServices']); 

angular.module('dataServices', []). 
service('Data', ['$http', function ($http) { 
    var my_Date = new Date(); 
    var rates = {}; 
    var urlBase = BASE_URL+"api/apirate.php"+"?nocache=" + my_Date.getUTCSeconds(); 

    this.getRates = function() { 
     $http({ 
       method: 'GET', 
       url: urlBase, 
       //headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
       success: function(data){ 
        console.log(data); 
        rates = data; 
       }, 
       error : function(statusCode,error) { 
        console.log(error); 
       } 
      }); 
     return rates; 
    }; 
}]); 

function LiverateController($scope, $timeout, Data) { 
    $scope.data = []; 
    var rates = {}; 
    (function tick() { 
     $scope.data = Data.getRates(function(){ 
      $timeout(tick, 1000); 
     }); 
    })(); 

    And also tried bellow method 

    $scope.callAtTimeout = function() { 
     console.log(Data.getRates()); 
    } 

    $timeout(function(){ $scope.callAtTimeout(); }, 1000); 

}; 

을하지만 나를 위해 작동하지 않았다거야. 한 번만 전화하면 돼. 이걸 써야 겠어. 제발 도와주세요.

+0

use $ Interval .. – Ved

+0

실시간 응용 프로그램의 경우 WebSocket을 사용해야합니다. 최소한 모델을 업데이트하는 서비스에서 긴 폴링을 사용해야합니다. 컨트롤러는 모델을 사용하고 모델이 변경되면 각도 바인딩을 사용하여 뷰를 업데이트해야합니다. 컨트롤러는 폴링하지 말고 멍청해야합니다. – Martin

답변

3

$http/약속이 사용되는 방식을 잘 모르는 것 같습니다.

angular.module('dataServices', []). 
service('Data', ['$http', '$q', function ($http, $q) { 
    var my_Date = new Date(); 
    var rates = {}; 
    var urlBase = BASE_URL+"api/apirate.php"+"?nocache=" + my_Date.getUTCSeconds(); 

    this.getRates = function() { 
    return $http({ 
     method: 'GET', 
     url: urlBase, 
    }).then(function(results) { 
     console.log(results); 
     return results.data; 
    }, function(error) { 
     console.log(error); 
     return $q.reject(error); 
    }); 
    }; 
}]); 

function LiverateController($scope, $timeout, Data) { 
    $scope.data = []; 
    var rates = {}; 
    (function tick() { 
    Data.getRates().then(function(data){ 
     $scope.data = data; 
    })['finally'](function() { 
     $timeout(tick, 1000); 
    }); 
    })(); 
}; 
또한

  • 내가 사용 향하다 것입니다 : 당신은 호출하는 함수, 또는 아래의 코드로 하나에서 파생 약속, 해당 $http 돌아 다시 약속을 반환해야 $interval의 같은 순진한 사용이

  • 느린 조금 $timeout에 대한 호출이 012에 실제로의 경우 서버를 망치 끝낼 수로 $interval 이상 $timeout,콜백. 요청 성공 및 실패시 모두 실행됩니다.

+0

정말로 감사합니다. 나는 오랜 시간 애써왔다. 나에게 많은 도움이된다. 기대하고있는대로 일하고 있습니다. –

관련 문제