Вопрос или проблема
Я сталкиваюсь с проблемой при создании динамической таблицы с динамическим rowspan. Мой JSON – это массив объектов. А элементы объектов также являются массивами. Элементы массивов должны соответствовать количеству динамических rowspan. У меня есть JSON такой:
{
"1": {
"Центр": "123 ",
"пользователь": {
"1": {
"userID": "1335",
"ИмяПользователя": "User1",
"месяц": {
"1": "3174.42",
"2": "3107.75",
"3": "3183.00",
"4": "2197.17",
"5": "2348.83",
"6": "1917.92",
"7": "1699.50",
"8": "430.50"
}
},
"2": {
"userID": "1336",
"ИмяПользователя": "User2",
"месяц": {
"1": "168.00",
"2": "160.00",
"3": "184.00",
"4": "144.00",
"5": "144.00",
"6": "191.50",
"7": "367.50",
"8": "1520.25",
"9": "2028.83",
"10": "2085.75",
"11": "2014.08",
"12": "1144.75"
}
}
}
},
"2": {
"Центр": "124",
"пользователь": {
"1": {
"userID": "1335",
"ИмяПользователя": "User1",
"месяц": {
"1": "2987.58",
"2": "3121.17",
"3": "4021.08",
"4": "2907.50",
"5": "3663.67",
"6": "3560.00",
"7": "3460.83",
"8": "1283.25"
}
},
"2": {
"userID": "1336",
"ИмяПользователя": "User 2",
"месяц": {
"6": "25.50",
"7": "18.50",
"8": "2722.33",
"9": "3795.83",
"10": "3944.83",
"11": "3907.00",
"12": "2257.58"
}
}
}
}
}
Если я хочу использовать ng-repeat-start и ng-repeat-end и сделать структуру таблицы, как ниже:
таблица, которую я хочу
Мне трудно получить динамический rowspan. Пожалуйста, проверьте, может кто-то помочь.
Ответ или решение
Для создания динамической таблицы с использованием AngularJS и применением директив ng-repeat-start
и ng-repeat-end
с учетом динамического rowspan, необходимо правильно понять структуру ваших данных и как они сопоставляются с HTML. Рассмотрим, как реализовать это на основе вашего JSON-объекта.
1. Анализ JSON-данных
Ваша структура данных представляет собой объект, содержащий центры с массивами пользователей. Каждый пользователь имеет свой уникальный идентификатор, имя и массив месяцев с соответствующими значениями.
Пример JSON:
{
"1": {
"Center": "123",
"user": {
"1": {
"userID": "1335",
"UserName": "User1",
"month": { "1": "3174.42", "2": "3107.75" }
},
"2": {
"userID": "1336",
"UserName": "User2",
"month": { "1": "168.00", "2": "160.00" }
}
}
}
}
2. Структурирование таблицы
Используя AngularJS, вам нужно будет использовать ng-repeat-start
и ng-repeat-end
, чтобы динамически управлять строчными элементами с учетом rowspan
. Пример кода для реализации будет следующим:
<table>
<thead>
<tr>
<th>Центр</th>
<th>Имя пользователя</th>
<th>Месяц</th>
<th>Значение</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="(centerId, center) in data">
<td rowspan="{{getRowSpan(center.user)}}">{{center.Center}}</td>
<td ng-repeat="(userId, user) in center.user" ng-if="$first">{{user.UserName}}</td>
<td ng-repeat="(monthId, monthValue) in user.month">{{monthId}}</td>
<td ng-repeat="(monthId, monthValue) in user.month">{{monthValue}}</td>
</tr>
</tbody>
</table>
3. Подсчет rowspan
Для правильного отображения этого кода вам нужно написать функцию, которая будет подсчитывать количество строк для каждого центра. Это можно будет реализовать в контроллере AngularJS:
$scope.getRowSpan = function(users) {
return Object.keys(users).length; // Возвращает количество пользователей для rowspan
};
4. Важные моменты
- Убедитесь, что ваш JSON имеет правильный синтаксис. В вашем примере у одного из объектов пропущена запятая и неправильный формат.
- Правильное использование
ng-if
. Используйтеng-if
для ограничения вывода имени пользователя только для первой строки. Это предотвратит его дублирование при создании строк для других месяцев.
Заключение
Следуя представленному плану, вы сможете динамически создавать таблицу с использованием AngularJS и обработать динамические rowspan
. Эта реализация обеспечит, что данные будут правильным образом отображаться на основании предоставленного JSON, что сделает вашу таблицу понятной и функциональной. Не забывайте тестировать таблицу на наличие различных сценариев использования данных для полноценной проверки работоспособности.