Estoy tratando de aprender AngularJS. Mi primer intento de obtener nuevos datos cada segundo funcionó:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Cuando simulo un servidor lento durmiendo el hilo durante 5 segundos, espera la respuesta antes de actualizar la interfaz de usuario y establecer otro tiempo de espera. El problema es cuando reescribí lo anterior para usar módulos angulares y DI para la creación de módulos:
'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);
})();
};
Esto solo funciona si la respuesta del servidor es rápida. Si hay algún retraso, envía una solicitud por segundo sin esperar una respuesta y parece borrar la interfaz de usuario. Creo que necesito usar una función de devolución de llamada. Lo intenté:
var x = Data.get({}, function () { });
pero obtuve un error: "Error: destination.push no es una función" Esto se basó en los documentos para $ resource pero realmente no entendí los ejemplos allí.
¿Cómo hago que funcione el segundo enfoque?