ฉันพยายามเรียน 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);
});
})();
};
เมื่อฉันจำลองเซิร์ฟเวอร์ที่ทำงานช้าโดยพักเธรดเป็นเวลา 5 วินาทีมันจะรอการตอบสนองก่อนที่จะอัปเดต UI และตั้งค่าการหมดเวลาอื่น ปัญหาคือเมื่อฉันเขียนด้านบนใหม่เพื่อใช้โมดูลเชิงมุมและ DI สำหรับการสร้างโมดูล:
'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);
})();
};
สิ่งนี้ใช้ได้เฉพาะเมื่อการตอบสนองของเซิร์ฟเวอร์รวดเร็ว หากมีความล่าช้ามันจะส่งสแปม 1 คำขอต่อวินาทีโดยไม่ต้องรอการตอบกลับและดูเหมือนว่าจะล้าง UI ฉันคิดว่าฉันต้องใช้ฟังก์ชันโทรกลับ ฉันเหนื่อย:
var x = Data.get({}, function () { });
แต่ได้รับข้อผิดพลาด: "Error: destination.push ไม่ใช่ฟังก์ชัน" ซึ่งอ้างอิงจากเอกสารสำหรับทรัพยากร $แต่ฉันไม่เข้าใจตัวอย่างที่นั่นจริงๆ
ฉันจะทำให้แนวทางที่สองทำงานได้อย่างไร