Próbuję się nauczyć AngularJS. Moja pierwsza próba uzyskania nowych danych co sekundę zadziałała:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Kiedy symuluję powolny serwer, śpiąc wątek przez 5 sekund, czeka na odpowiedź przed aktualizacją interfejsu użytkownika i ustawieniem kolejnego limitu czasu. Problem pojawia się, gdy przepisałem powyższe, aby użyć modułów Angular i DI do tworzenia modułów:
'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);
})();
};
Działa to tylko wtedy, gdy odpowiedź serwera jest szybka. Jeśli występuje jakieś opóźnienie, wysyła 1 żądanie na sekundę bez czekania na odpowiedź i wydaje się czyścić interfejs użytkownika. Myślę, że muszę użyć funkcji oddzwaniania. Próbowałem:
var x = Data.get({}, function () { });
ale pojawił się błąd: „Błąd: miejsce docelowe.push nie jest funkcją” Zostało to oparte na dokumentacji dla $ zasób, ale nie rozumiałem tam przykładów.
Jak sprawić, by drugie podejście zadziałało?