Saya mencoba mempelajari AngularJS. Upaya pertama saya untuk mendapatkan data baru setiap detik berhasil:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Ketika saya mensimulasikan server yang lambat dengan menidurkan utas selama 5 detik, ia menunggu respons sebelum memperbarui UI dan menyetel waktu tunggu lain. Masalahnya adalah ketika saya menulis ulang di atas untuk menggunakan modul Angular dan DI untuk pembuatan modul:
'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);
})();
};
Ini hanya berfungsi jika respons server cepat. Jika ada penundaan, itu akan mengirimkan 1 permintaan per detik tanpa menunggu tanggapan dan tampaknya menghapus UI. Saya rasa saya perlu menggunakan fungsi panggilan balik. Saya mencoba:
var x = Data.get({}, function () { });
tetapi mendapat kesalahan: "Error: destination.push is not a function" Ini didasarkan pada dokumen untuk $ resource tetapi saya tidak benar-benar memahami contoh di sana.
Bagaimana cara membuat pendekatan kedua berhasil?