Tôi đang cố gắng học AngularJS. Nỗ lực đầu tiên của tôi để lấy dữ liệu mới mỗi giây đã thành công:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Khi tôi mô phỏng một máy chủ chậm bằng cách ngủ chuỗi trong 5 giây, nó sẽ đợi phản hồi trước khi cập nhật giao diện người dùng và đặt thời gian chờ khác. Vấn đề là khi tôi viết lại phần trên để sử dụng mô-đun Angular và DI để tạo mô-đun:
'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);
})();
};
Điều này chỉ hoạt động nếu phản hồi của máy chủ nhanh. Nếu có bất kỳ sự chậm trễ nào, nó sẽ gửi ra 1 yêu cầu mỗi giây mà không cần đợi phản hồi và dường như xóa giao diện người dùng. Tôi nghĩ rằng tôi cần sử dụng một hàm gọi lại. Tôi đã thử:
var x = Data.get({}, function () { });
nhưng gặp lỗi: "Error: destination.push không phải là một hàm" Điều này dựa trên tài liệu cho $ resource nhưng tôi không thực sự hiểu các ví dụ ở đó.
Làm cách nào để làm cho cách tiếp cận thứ hai hoạt động?