AngularJS: понимание списка в ng-repeat

У меня следующая структура JSON:

$scope.info = [
              {
               "date": "01.10", "data": [
                    {'name': 'Кастусь', "behavior": "good", "attitude": "good"}
                    {'name': 'Андрэй', "behavior": "2 заўвагі па паводзінам", "attitude": "good"}]
               },
               {
               "date": "24.09", "data": [
                     {'name': 'Кастусь', "behavior": "good", "attitude": "good"},
                     {'name': 'Андрэй', "behavior": "3 заўвагі па паводзінам", "attitude": " good"}]
               }
 //...  

Я хотел бы перебрать все имена. Я пробовал питон как ng-repeat="name in record for record in info" но это не кажется точным. Не могли бы вы помочь, пожалуйста?

2 ответа

Решение

Я предлагаю вам сопоставить это с плоским массивом, который упростит вам сортировку и фильтрацию

$scope.info = data.reduce(function(a, c, i){
    return a.concat(c.data.map(function(item){
           item.date = c.date;
           return item
     });
},[])

Вернется

$scope.info = [

   {'name': 'Кастусь', "behavior": "good", "attitude": "good", "date": "01.10"},
   {'name': 'Андрэй', "behavior": "2 заўвагі па паводзінам", "attitude": "good", "date": "01.10"}
   {'name': 'Кастусь', "behavior": "good", "attitude": "good", "date": "24.09"},
   {'name': 'Андрэй', "behavior": "3 заўвагі па паводзінам", "attitude": " good", "date": "24.09"}
]

Для Angular вам нужно сделать:

<div ng-repeat="infoItem in info">
    <div ng-repeat="dataItem in infoItem.data">
        <div ng-bind="datItem.name"></div>
    </div>
</div>

Но это требует много памяти, поэтому я бы сказал, перебирать массив в вашем Javascript и создавать новую переменную области видимости со сглаженной структурой, и перебирать это в вашем HTML

Вы могли бы сделать что-то вроде этого:

var info = [{
  "date": "01.10",
  "data": [{
    'name': 'Кастусь',
    "behavior": "good",
    "attitude": "good"
  }, {
    'name': 'Андрэй',
    "behavior": "2 заўвагі па паводзінам",
    "attitude": "good"
  }]
}, {
  "date": "24.09",
  "data": [{
    'name': 'Кастусь',
    "behavior": "good",
    "attitude": "good"
  }, {
    'name': 'Андрэй',
    "behavior": "3 заўвагі па паводзінам",
    "attitude": " good"
  }]
}];


var names = [];

info.map(function(infoItem) {
  return infoItem.data.map(function(dataItem) {
    names.push(dataItem.name);
  });
});
console.log(names);

И связать ng-repeat как это:

    <div ng-repeat="name in names" ng-bind="name"></div>
Другие вопросы по тегам