我正在嘗試學習AngularJS。我第一次嘗試,以獲得新的數據每秒的工作:使用AngularJS進行服務器輪詢
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
當我在睡眠5秒鐘線程等待更新的用戶界面和設置其他超時之前的響應模擬一個緩慢的服務器。問題是,當我重寫使用角模塊和DI爲模塊創建上面:
'use strict';
angular.module('datacat', ['dataServices']);
angular.module('dataServices', ['ngResource']).
factory('Data', function ($resource) {
return $resource('api/changingData', {}, {
query: { method: 'GET', params: {}, isArray: true }
});
});
function dataCtrl($scope, $timeout, Data) {
$scope.data = [];
(function tick() {
$scope.data = Data.query();
$timeout(tick, 1000);
})();
};
這僅適用於如果服務器響應速度快。如果有任何延遲,它會在一秒鐘內發出1次請求,而不會等待響應,並且似乎清除了用戶界面。我想我需要使用回調函數。我想:
var x = Data.get({}, function() { });
,但得到了一個錯誤:「錯誤:destination.push不是一個函數」這是基於文檔爲$resource,但我真的不知道那裏的例子。
如何使第二種方法有效?
優秀的,謝謝。我不知道你可以把回調放在那裏。這解決了垃圾郵件問題。我還將數據分配移到了回調內部,從而解決了UI清除問題。 – David
很高興能夠幫助!如果這解決了問題,您可以接受這個答案,以便其他人以後也可以從中受益。 – abhaga
假設上述代碼適用於pageA和controllerA。當我導航到pageB和controllerB時,如何停止此計時器? –