0

Я использую 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> 
+0

Есть ли причина, по которой вы должны сделать это в ng-repeat? Это можно сделать в службе, которая вызывает удаленный api в момент ответа ответа? Похоже, что если вам нужны данные в этом конкретном формате, вам понадобится повсюду в этом формате. Было бы чище, если бы вы сделали это преобразование один раз. Затем ни один из контроллеров вашего представления не должен знать, что формат был чем-то иным, чем формат soundmanager2. – mcgraphix

+0

@mcgraphix Я бы хотел сделать это в удаленной службе, но, к сожалению, я не контролирую формат ответа. Вы правы, это будет иметь смысл делать так, но я не говорю о той части данных. – cj5

+1

Я не имел в виду на сервере. Я имел в виду ваше служение в вашем угловом приложении. Обычно вы не делаете запросы ajax прямо в своем контроллере. Вместо этого вы будете использовать сервис (посмотрите angular.service()), чтобы он все еще находился под вашим контролем. – mcgraphix

ответ

2

Почему вы не обновлять список источников?

<a ng-repeat="sample in getFullModels(selected.audio) | mapAudio" href="#" class="list-group-item">{{sample.title}}</a> 

#getFullModels будет иметь код для возврата полной модели представления.

+0

- это функция getFullModels() части контроллера (т. Е. $ Scope)? – cj5

+0

Да, это часть текущего объема –