Angular 1.5 - 自动提取api更新值

时间:2017-09-28 16:12:00

标签: javascript angularjs

我想知道如果不使用websocket这是否可行。我想要做的是每次api数据改变,然后它会自动调用我重新获取这些值的服务。我尝试使用setInterval function,但这似乎有点矫枉过正,从长远来看可能容易出错

以下是我服务的代码:



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




和我的控制器代码:



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);
  
});




1 个答案:

答案 0 :(得分:0)

唯一的两个选择是websockets或polling。前者更新更酷,但实施起来更复杂。后者更容易,但不提供即时更新(除了长轮询,这是一个稍微复杂的实现)。如果您需要服务器和客户端数据之间真正的实时链接,那么websockets就是您的选择。我认为,对于大多数应用程序来说,定期的$ interval轮询是足够的。

我建议构建一个保存数据的服务并进行轮询以保持更新,而不是在主控制器中进行。