Я пытаюсь показать таблицу для сбора данных на 4 уровня. В основном что-то вроде этого:«юридическая» таблица HTML с несколькими строками заголовков с AngularJS
var data = [
{
group_id: 1,
group_name: 'group1',
subgroups: [
{
subgroup_id: 1,
subgroup_name: 'subgroup1',
elements : [
{
element_id: 1,
element_name: 'element1',
element_members: [
{
name: 'aaaa',
score: 150,
bonus: 32
},
{
name: 'bbbb',
score: 75,
bonus: 33
}
]
},
{
element_id: 2,
element_name: 'element2',
element_members: [
{
name: 'cccc',
score: 780,
bonus: 71
},
{
name: 'dddd',
score: 900,
bonus: 311
}
]
}
]
},
{
subgroup_id: 2,
subgroup_name: 'subgroup2',
elements: []
}
]
},
{
group_id: 2,
group_name: 'group2',
subgroups: []
}
];
Моя большая забота - сохранить его «законным» HTML.
Так я в настоящее время переборе корыто groups
используя большой <div class="group" ng-repeat="group in data">
Внутри каждого DIV У меня есть таблицы, как так:
<table class="subgroup" ng-repeat="subgroup in group.subgroups">
С одной thead
, содержащий имена столбцов: «название подгруппы, ELEMENT_NAME, total_scores, total_bonuses "затем нг-повторив TBODY так:
<tbody ng-repeat="element in subgroup.elements">
затем снова, потому что я хотите показать итоговые значения элементов внутри каждой строки и щелкнуть; детали для каждого элемента, так что у меня есть:
<tr ng-click="element.expanded = !element.expanded">
с данными внутри него затем в
<tr ng-if="typo.expanded">
<td colspan="4">
<table>
<thead>
<tr>
<th>Member name</th>
<th>Member score</th>
<th>Member bonus</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="member in element.element_members">
<td>{{ member.name }}</td>
<td>{{ member.score }}</td>
<td>{{ member.bonus }}</td>
</tr>
</tbody>
</table>
</td>
</tr>
Voila. Все это работает отлично, но у меня есть одна проблема: я бы хотел, чтобы ширины столбцов для каждой внешней таблицы (одна с total_scores, total_bonuses, ...) были выровнены друг с другом, но поскольку они представляют собой разные таблицы, она будет корректировать в соответствии с размером текста. Также я хочу сохранить это поведение (приспосабливаясь к размеру текста), а не заставлять ширину для каждого столбца.
Одно решение, которое работает, но не является законным HTML является использование только одна таблица для перечисления каждой подгруппы и имеют подпольную тег между <table>
и <thead>
и следующие <tbody>
с тем чтобы я мог перебирать корыто подгруппы внутри одной и той же таблицы с одинаковые столбцы, но с несколькими <thead>
s для изменения имени первого столбца и повторения других столбцов.
Итак, каковы мои законные варианты HTML, если они есть?
EDIT: Добавлен plnkr
Here is a link to a plnkr illustrating my problem: в 2 таблицы (один для каждой подгруппы) под одним названием группы не имеют одинаковые размеры столбцов, и я хотел бы сделать их пригодными в одну таблицу (так что вместо этого будет одна таблица для каждой группы), чтобы по крайней мере внутри одной и той же группы подгруппы показывались с одинаковыми размерами столбцов.
Вы считали bootstrap или другие библиотеки CSS для таблиц, которые не используют HTML-элемент 'table'? Или просто сетки CSS, такие как система начальной загрузки? http://getbootstrap.com/css/#grid – bhantol
В настоящее время я использую bootstrap и его класс таблицы. Использование grid-системы разрешило бы мою проблему только в том случае, если я решит для произвольной ширины для каждого столбца заранее, что я уже могу сделать, но я бы этого не хотел, потому что данные внутри таблицы могут очень сильно меняться с точки зрения длины, I хотите, чтобы поведение таблиц по умолчанию ('table-layout: auto') выполнялось по размеру моих столбцов в зависимости от их содержимого. –
Добавил бы отдельные итоги
ответ
Поскольку они представляют собой несколько таблиц, уложенных друг на друга, каждая таблица выравнивает свои столбцы на основе их содержимого без каких-либо привязок к другим таблицам, как ожидалось.
И выше будет оставить его незаконным, как вы указали.
Я считаю, что следующий главный вопрос: -
Там нет ничего хорошего (не безобразно) Альтернативой с использованием
<table>
, когда у вас есть вложенности, который идет несколько уровней глубоко и элементы/группы произвольной длины.Вот основные причины:
<table>
может иметь только 1<thead>
и только 1tfoot
но Nester группа в вашем примере идет несколько уровня глубокойgroups->subGroups->elements->members
и мы хотим некоторые столбцы для выравнивания.thead
И единственным элементом, разрешенным под<tbody>
, является<tr>
, который будет получен ng-повторителями.Таким образом, для любой таблицы с одним адам можно вложить не более трех уровней - один уровень для thead, взятый заголовком столбца, другой уровень для нескольких тел и третьего уровня (уровень листа) для нескольких tr в них ,
Другой вариант некрасиво стол
Если вы готовы пойти на компромисс в некоторых выглядеть и чувствовать себя вы можете try this plnkr. Здесь мы сглаживаем и вводим общий и родительский элементы. Я не рекомендую это и в соответствии с комментариями, которые я предлагаю использовать менее макет или другую альтернативу, выходящую за рамки вопроса.
источник
2017-01-03 20:59:47 bhantol
Отлично! Это хорошая идея сгладить таблицу и добавить свойство 'level' для использования внутри' 'td'' ng-if's. Я попытаюсь использовать эту идею и приспособить ее к моему делу –
Смежные вопросы