私は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秒間に1リクエストをスパム送信し、UIをクリアしているようです。コールバック関数を使う必要があると思います。私は試した:
var x = Data.get({}, function () { });
しかし、エラーが発生しました:「エラー:destination.pushは関数ではありません」これは$ resourceのドキュメントに基づいていましたが、そこにある例を本当に理解していませんでした。
2番目のアプローチを機能させるにはどうすればよいですか?