Estou tentando aprender AngularJS. Minha primeira tentativa de obter novos dados a cada segundo funcionou:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Quando eu simulo um servidor lento dormindo o thread por 5 segundos, ele aguarda a resposta antes de atualizar a IU e definir outro tempo limite. O problema é quando eu reescrevi o acima para usar módulos Angular e DI para a criação do módulo:
'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);
})();
};
Isso só funciona se a resposta do servidor for rápida. Se houver algum atraso, ele envia 1 solicitação por segundo sem esperar por uma resposta e parece limpar a IU. Acho que preciso usar uma função de retorno de chamada. Eu tentei:
var x = Data.get({}, function () { });
mas ocorreu um erro: "Erro: o destino.push não é uma função" Isso foi baseado na documentação de $ resource, mas eu realmente não entendi os exemplos lá.
Como faço a segunda abordagem funcionar?