2017-09-28 49 views
0

我想知道如果這可能沒有使用WebSocket。我想要做的是,每當api數據發生變化時,它都會自動調用我所提供的服務來重新獲取這些值。我試圖用一個setInterval function但這似乎是大材小用,也許容易,從長遠來看Angular 1.5 - 自動獲取API更新值

這裏的錯誤是我的服務代碼:

app.factory('ApiService',function($http,Config,$q){ 
 
\t 
 
\t return { 
 
\t \t login: function(payload){ 
 
\t \t \t var deferred = $q.defer(); 
 
\t \t \t $http({ 
 
\t \t \t \t method:'POST', 
 
\t \t \t \t url:Config.baseUrl + '/api/login', 
 
\t \t \t \t data:payload, 
 
\t \t \t \t headers: {'Content-Type': 'application/json'}, 
 
\t \t \t }).then(function (result){    
 
\t \t \t \t return deferred.resolve(result); 
 
\t \t \t }, function (result){ 
 
\t \t \t \t return deferred.reject(result); 
 
\t \t \t }); 
 
\t \t \t return deferred.promise; 
 
\t \t }, 
 
\t \t dailyTransactions: function(apiToken){ 
 
\t \t \t var deferred = $q.defer(); 
 
\t \t \t $http({ 
 
\t \t \t \t method:'GET', 
 
\t \t \t \t url:Config.baseUrl + '/api/client/transaction/total/?token='+apiToken, 
 
\t \t \t \t headers: { 
 
\t \t \t \t \t 'Content-Type': 'application/json', 
 
\t \t \t \t \t 'Authorization':'token '+apiToken 
 
\t \t \t \t }, 
 
\t \t \t }).then(function (result){    
 
\t \t \t \t return deferred.resolve(result); 
 
\t \t \t }, function (result){ 
 
\t \t \t \t return deferred.reject(result); 
 
\t \t \t }); 
 
\t \t \t return deferred.promise; 
 
\t \t }, 
 
});

和我的控制器代碼:

app.controller('MainCtrl', function($state,$scope,$position,$rootScope,$timeout,ApiService,toastr) { 
 
    console.log($state); 
 
    
 
    $rootScope.user = localStorage.getItem('username'); 
 
    var payload = localStorage.getItem('api_Key'); 
 

 
    $scope.showDailyTransactions = function(){ 
 
    ApiService.dailyTransactions(payload).then(function(response){ 
 
     $scope.apiData ={ 
 
     "total_sent":response.data.total_sent, 
 
     "total_success":response.data.total_success, 
 
     "total_pending_failed":response.data.total_pending_failed 
 
     }; 
 

 
     $scope.daily = $scope.apiData; 
 
     
 
    }, function(error) { 
 
    console.log(error); 
 
    }); 
 

 
    } 
 

 
    $timeout($scope.showDailyTransactions,5000); 
 
    
 
});

+0

你會如何知道數據已經改變?沒有輪詢或websocket或服務器端事件沒有辦法。 – dfsq

+0

api是我們正在使用的服務,好點的生病了看你的建議。現在,我能夠監視它是否發生了變化的唯一方式是我使用該服務時。 –

回答

0

唯一的兩個選擇確實是websockets或者輪詢。前者更新更酷,但實施起來更復雜。後者更容易,但不提供即時更新(除了長輪詢,這是稍微複雜的實現)。如果您需要在服務器和客戶端數據之間實現真正的實時鏈接,那麼websockets就是一條可行的路線。但我認爲,對於大多數應用程序來說,常規的$ interval間隔輪詢是足夠的。

我會建議構建一個服務來保存數據並進行輪詢以保持其更新,而不是在主控制器中執行。

+0

很酷我會嘗試在盒子外面思考,因爲我真的不確定是否有任何辦法可以從服務器端進行輪詢讓我們說你已經被授權訪問api,並且你需要其中一些在給定的時間內執行。 –