Я использую $ resource для извлечения данных json с серверного сервера.
Во-первых, я получаю список идентификаторов, с первым вызовом ресурса. Затем для каждого полученного идентификатора я использую $ resource для извлечения данных, связанных с этим идентификатором.
Теперь проблема заключается в следующем: я хотел бы связать ответ с отправленным идентификатором, чтобы я мог записывать данные в хэш-таблицу. (например: $ scope.table [response.id] = data;). Единственный способ, которым я нашел, - это вернуть API обратно идентификатор в ответ json, но я хотел бы связать идентификатор с запросом, поэтому я знаю, для какого идентификатора я получил ответ, не имея API, чтобы отправить его обратно.
Вот мой текущий код (упрощенный, просто чтобы получить идею):
// the factory. eg I send /rest/item/12345
app.factory('Item', function ($resource) {
return $resource("/rest/item/:id", { id: '@id'})
});
// the call (in a loop)
// I need to get { "id" : 12345, "text" : "blahblahblah" }
Item.get({ id : itemId },
function(data){
$scope.table[data.id] = data;
});
Я хотел бы написать что-то вроде этого:
// the call (in a loop).
// I would like to only need to get { "text" : "blahblahblah" }
Item.get({ id : itemId },
function(id, data){
$scope.table[id] = data;
});
Думаю, я мог бы использовать эту форму:
$scope.table[itemId] = Item.get({id : itemId});
Но мне нужно $ scope.table [itemId] быть "правильным" значением все время, а не обещанием, и я хочу, чтобы он обновлялся, когда я получаю ответ.
Является ли это возможным?
что-то вроде этого может работать:
// get the array of ids
ItemIds.get({},
function(ids){
// for each id, make the request for the actual item
ids.forEach(function(id) {
Item.get({ id : id },
function(data){
// in this nested callback, you have access to data and id
$scope.table[id] = data;
});
});
});