Tôi đang cố gắng học AngularJS. Nỗ lực đầu tiên của tôi để nhận dữ liệu mới sau mỗi giây làm việc:Cuộc thăm dò của máy chủ với AngularJS
'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áy chủ chậm bằng cách chờ chuỗi trong 5 giây, nó chờ 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 ở trên để sử dụng mô-đun góc 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 đi 1 yêu cầu một giây mà không phải chờ 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 phải sử dụng một chức năng gọi lại. Tôi cố gắng:
var x = Data.get({}, function() { });
nhưng có một lỗi: "Lỗi: destination.push không phải là một chức năng" này được dựa trên các tài liệu cho $resource nhưng tôi không thực sự hiểu những ví dụ đó.
Làm cách nào để phương pháp tiếp cận thứ hai hoạt động?
Tuyệt vời, cảm ơn. Tôi không biết bạn có thể gọi lại ở đó. Điều đó giải quyết được vấn đề spam. Tôi cũng đã chuyển bài tập dữ liệu vào bên trong cuộc gọi lại đã giải quyết vấn đề thanh toán bù trừ UI. – David
Rất vui được giúp đỡ! Nếu điều này giải quyết được vấn đề, bạn có thể chấp nhận câu trả lời này để câu trả lời khác sau này cũng có thể được hưởng lợi từ nó. – abhaga
Giả sử mã trên là dành cho pageA và controllerA. Làm thế nào để tôi ngừng bộ đếm thời gian này khi tôi điều hướng đến pageB và controllerB? –