最佳答案
我正在努力学习 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);
})();
};
这只在服务器响应快的情况下有效。如果有任何延迟,它会在不等待响应的情况下每秒发出一个请求,并且似乎会清除 UI。我想我需要使用一个回调函数。我试过:
var x = Data.get({}, function () { });
但是得到了一个错误: “ Error: destination.push is not a function”这是基于 $资源的文档,但是我并不真正理解那里的例子。
我如何使第二种方法起作用?