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>