我想知道如果不使用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);
});

答案 0 :(得分:0)
唯一的两个选择是websockets或polling。前者更新更酷,但实施起来更复杂。后者更容易,但不提供即时更新(除了长轮询,这是一个稍微复杂的实现)。如果您需要服务器和客户端数据之间真正的实时链接,那么websockets就是您的选择。我认为,对于大多数应用程序来说,定期的$ interval轮询是足够的。
我建议构建一个保存数据的服务并进行轮询以保持更新,而不是在主控制器中进行。