J'essaye d'apprendre AngularJS. Ma première tentative d'obtenir de nouvelles données toutes les secondes a fonctionné:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Lorsque je simule un serveur lent en dormant le thread pendant 5 secondes, il attend la réponse avant de mettre à jour l'interface utilisateur et de définir un autre délai. Le problème est lorsque j'ai réécrit ce qui précède pour utiliser des modules angulaires et DI pour la création de modules:
'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);
})();
};
Cela ne fonctionne que si la réponse du serveur est rapide. S'il y a un délai, il envoie 1 demande par seconde sans attendre de réponse et semble effacer l'interface utilisateur. Je pense que j'ai besoin d'utiliser une fonction de rappel. J'ai essayé:
var x = Data.get({}, function () { });
mais j'ai obtenu une erreur: "Erreur: destination.push n'est pas une fonction" Ceci était basé sur la documentation de $ resource mais je n'ai pas vraiment compris les exemples.
Comment faire fonctionner la deuxième approche?