Ich versuche AngularJS zu lernen. Mein erster Versuch, jede Sekunde neue Daten zu erhalten, hat funktioniert:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Wenn ich einen langsamen Server simuliere, indem ich den Thread 5 Sekunden lang schlafe, wartet er auf die Antwort, bevor er die Benutzeroberfläche aktualisiert und ein anderes Zeitlimit festlegt. Das Problem ist, wenn ich das Obige neu geschrieben habe, um Angular-Module und DI für die Modulerstellung zu verwenden:
'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);
})();
};
Dies funktioniert nur, wenn die Serverantwort schnell ist. Wenn es eine Verzögerung gibt, spammt es 1 Anfrage pro Sekunde aus, ohne auf eine Antwort zu warten, und scheint die Benutzeroberfläche zu löschen. Ich denke, ich muss eine Rückruffunktion verwenden. Ich habe es versucht:
var x = Data.get({}, function () { });
habe aber einen Fehler bekommen: "Fehler: destination.push ist keine Funktion" Dies basierte auf den Dokumenten für $ resource, aber ich habe die Beispiele dort nicht wirklich verstanden.
Wie mache ich den zweiten Ansatz?