我正在尝试学习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和设置另一个超时之前等待响应。问题是当我重写上述代码以使用Angular模块和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 is not a function",这是基于$resource文档的,但我并没有真正理解那里的示例。
我如何使第二种方法起作用?