Sto cercando di imparare AngularJS. Il mio primo tentativo di ottenere nuovi dati ogni secondo ha funzionato:
'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 simulo un server lento dormendo il thread per 5 secondi, attende la risposta prima di aggiornare l'interfaccia utente e impostare un altro timeout. Il problema è quando ho riscritto quanto sopra per utilizzare i moduli angolari e DI per la creazione del modulo:
'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);
})();
};
Funziona solo se la risposta del server è veloce. In caso di ritardo, invia 1 richiesta al secondo senza attendere una risposta e sembra cancellare l'interfaccia utente. Penso di aver bisogno di usare una funzione di callback. Provai:
var x = Data.get({}, function () { });
ma ho ricevuto un errore: "Errore: destination.push non è una funzione" Questo era basato sui documenti per $ resource ma non ho davvero capito gli esempi lì.
Come faccio a far funzionare il secondo approccio?