私たちが構築しているAngularアプリに非常に奇妙な問題があります。以下のように定義されたリソースからデータをロードするたびに (作成できる最も単純な例)、データバインディングに使用できるデータを取得します (例: ng-repeat='message in messages' または {{message.id}} として) )ただし、配列またはオブジェクトとしてアクセスしてjavascriptから読み取ることはできません(get({id:myId})またはquery()を使用したかどうかによって異なります)。
それを繰り返しても、$get、$query、$save などのキーしか得られませんが、実際のデータは得られません。
app.factory('Message', ['$resource', function($resource) {
return $resource('MY_URL/messages/:id', {id: '@id'});
}]);
app.service('messageService', ['$rootScope', 'Message', function($rootScope, Message) {
var messages = Message.query();
var selectedMessage = null;
var service = {};
service.get = function(id) {
// Problem A (see below for details)
if (arguments.length === 1) return Message.get({id: id});
else return messages;
};
var MenuCtrl = function($scope, Project, messageService, otherService) {
$scope.projects = Project.query();
$scope.messages = messageService.get();
// Problem B (details below)
};
問題 A では、既にフェッチされたコレクションから単一の要素を返すことができるようにしたいのですが、データの準備が整う前に発生した呼び出しを処理する方法が必要です。
問題 B では、フェッチしたデータの一部を処理し、結果を「otherService」に渡したいと考えていますが、データの準備ができるまでこれを遅らせる方法が必要です。