Я использую angularjs-soundmanager2 и массив объектов должны соответствовать этому объектуЕсть ли способ переназначить значения ключа для объекта, итерации с помощью ng-repeat?
{id: n, title: 'Title', artist: 'Artist', url: 'URL'}
Я обращающегося удаленный API, который дает мне этот объект
{id: n, filename: 'URL', title: 'Title'}
То, что я хочу сделать, это переназначить последний объект соответствует первому. Я попытался использовать фильтр в ng-repeat, но это, похоже, не приводит к результату без прерывания итерации (угловая дает мне эту ошибку [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
).
app.filter('mapAudio', function() {
return function(items, field) {
var filtered = [];
angular.forEach(items, function(item) {
filtered.push({id: item.id, title: item.title, artist: '', url: item.filename});
});
return filtered;
};
});
На HTML стороне:
<a ng-repeat="sample in selected.audio | mapAudio" href="#" class="list-group-item">{{sample.title}}</a>
Есть ли причина, по которой вы должны сделать это в ng-repeat? Это можно сделать в службе, которая вызывает удаленный api в момент ответа ответа? Похоже, что если вам нужны данные в этом конкретном формате, вам понадобится повсюду в этом формате. Было бы чище, если бы вы сделали это преобразование один раз. Затем ни один из контроллеров вашего представления не должен знать, что формат был чем-то иным, чем формат soundmanager2. – mcgraphix
@mcgraphix Я бы хотел сделать это в удаленной службе, но, к сожалению, я не контролирую формат ответа. Вы правы, это будет иметь смысл делать так, но я не говорю о той части данных. – cj5
Я не имел в виду на сервере. Я имел в виду ваше служение в вашем угловом приложении. Обычно вы не делаете запросы ajax прямо в своем контроллере. Вместо этого вы будете использовать сервис (посмотрите angular.service()), чтобы он все еще находился под вашим контролем. – mcgraphix