尝试使用两个不同的数组用 ng-repeat 填充 html table
Trying to populate html table with ng-repeat using two different arrays
我在尝试用两个数组填充 table 时遇到了一些问题。我正在尝试实现以下输出:
我有一个名为 students
的数组,在每个学生对象中,我有一个 courses
数组。我正在尝试使用 ng-repeat
填充我的 table 以显示针对每个学生的所有课程。
并非所有数据都在每门课程中给出,这意味着如果学生尚未开始课程,则它不会出现在 courses
数组中。此外,如果学生尚未完成课程,则不会给出完成日期。
所以我的数组看起来像这样:
$scope.students = [
{
Id: 1,
Name: 'Joe Blogs',
Courses: [
{
Title: 'Course 1',
Grade: 87,
Completed: true,
DateCompleted: '2018-01-01'
},
{
Title: 'Course 2',
Grade: 2,
Completed: false
}
]
},
{
Id: 2,
Name: 'Peter Smith',
Courses: [
{
Title: 'Course 1',
Grade: 100,
Completed: true,
DateCompleted: '2018-01-01'
},
{
Title: 'Course 2',
Grade: 95,
Completed: true,
DateCompleted: '2018-01-01'
},
{
Title: 'Course 3',
Grade: 10,
Completed: false
}
]
},
{
Id: 3,
Name: 'Joanne Someone',
Courses: [
{
Title: 'Course 3',
Grade: 55,
Completed: false,
}
]
}
]
到目前为止,我的代码片段如下所示:
<table class="table table-hover" width="100%">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Course</th>
<th>Grade</th>
<th>Completed</th>
<th>Date Completed</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="student in students">
<td>{{ student.Id }}</td>
<td>{{ student.Name }}</td>
<td>
<!-- Can't figure this bit out -->
</td>
</tr>
</tbody>
</table>
但我对如何让多个课程针对每个学生展示感到困惑。我还发现,通过使用 ng-repeat
,如果某个值不在对象中(例如完成日期),那么该字段将不会显示并将所有内容向上推,并且不对齐。
最后,我会提到我正在使用 angular-datatables 但是,我只是想弄清楚这个概念,然后我可以将它应用到 datatable 秒后。
为此,您必须使用 rowspan
。并且特定 Id 的值的长度应为 Courses
。然后,您需要在 tbody 上使用 ng-repeat 来重复 tbody 部分,并在 tr 上使用 ng-repeat 来重复每个学生的 Courses
数组。因此,您的 table 查看代码可以是:
<table>
<thead>
<tr>
<td>Id</td>
<td>Name</td>
<td>Course</td>
<td>Grade</td>
<td>Completed</td>
<td>Date Completed</td>
</tr>
</thead>
<tbody ng-repeat="x in students">
<tr>
<td rowspan="{{x.Courses.length}}"><span>{{ x.Id }}</span></td>
<td rowspan="{{x.Courses.length}}"><span>{{ x.Name }}</span></td>
<td><span>{{x.Courses[0].Title}}</span></td>
<td><span>{{x.Courses[0].Grade}}</span></td>
<td><span>{{x.Courses[0].Completed}}</span></td>
<td><span>{{x.Courses[0].DateCompleted}}</span></td>
</tr>
<tr ng-repeat="item in x.Courses" ng-if="$index > 0">
<td><span>{{item.Title}}</span></td>
<td><span>{{item.Grade}}</span></td>
<td><span>{{item.Completed}}</span></td>
<td><span>{{item.DateCompleted}}</span></td>
</tr>
</tbody>
</table>
为了避免在某些值不可用时破坏 table 代码,只需将其放在 span
元素中,这样它仍然会加载 td
而其中没有任何值。
我在尝试用两个数组填充 table 时遇到了一些问题。我正在尝试实现以下输出:
我有一个名为 students
的数组,在每个学生对象中,我有一个 courses
数组。我正在尝试使用 ng-repeat
填充我的 table 以显示针对每个学生的所有课程。
并非所有数据都在每门课程中给出,这意味着如果学生尚未开始课程,则它不会出现在 courses
数组中。此外,如果学生尚未完成课程,则不会给出完成日期。
所以我的数组看起来像这样:
$scope.students = [
{
Id: 1,
Name: 'Joe Blogs',
Courses: [
{
Title: 'Course 1',
Grade: 87,
Completed: true,
DateCompleted: '2018-01-01'
},
{
Title: 'Course 2',
Grade: 2,
Completed: false
}
]
},
{
Id: 2,
Name: 'Peter Smith',
Courses: [
{
Title: 'Course 1',
Grade: 100,
Completed: true,
DateCompleted: '2018-01-01'
},
{
Title: 'Course 2',
Grade: 95,
Completed: true,
DateCompleted: '2018-01-01'
},
{
Title: 'Course 3',
Grade: 10,
Completed: false
}
]
},
{
Id: 3,
Name: 'Joanne Someone',
Courses: [
{
Title: 'Course 3',
Grade: 55,
Completed: false,
}
]
}
]
到目前为止,我的代码片段如下所示:
<table class="table table-hover" width="100%">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Course</th>
<th>Grade</th>
<th>Completed</th>
<th>Date Completed</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="student in students">
<td>{{ student.Id }}</td>
<td>{{ student.Name }}</td>
<td>
<!-- Can't figure this bit out -->
</td>
</tr>
</tbody>
</table>
但我对如何让多个课程针对每个学生展示感到困惑。我还发现,通过使用 ng-repeat
,如果某个值不在对象中(例如完成日期),那么该字段将不会显示并将所有内容向上推,并且不对齐。
最后,我会提到我正在使用 angular-datatables 但是,我只是想弄清楚这个概念,然后我可以将它应用到 datatable 秒后。
为此,您必须使用 rowspan
。并且特定 Id 的值的长度应为 Courses
。然后,您需要在 tbody 上使用 ng-repeat 来重复 tbody 部分,并在 tr 上使用 ng-repeat 来重复每个学生的 Courses
数组。因此,您的 table 查看代码可以是:
<table>
<thead>
<tr>
<td>Id</td>
<td>Name</td>
<td>Course</td>
<td>Grade</td>
<td>Completed</td>
<td>Date Completed</td>
</tr>
</thead>
<tbody ng-repeat="x in students">
<tr>
<td rowspan="{{x.Courses.length}}"><span>{{ x.Id }}</span></td>
<td rowspan="{{x.Courses.length}}"><span>{{ x.Name }}</span></td>
<td><span>{{x.Courses[0].Title}}</span></td>
<td><span>{{x.Courses[0].Grade}}</span></td>
<td><span>{{x.Courses[0].Completed}}</span></td>
<td><span>{{x.Courses[0].DateCompleted}}</span></td>
</tr>
<tr ng-repeat="item in x.Courses" ng-if="$index > 0">
<td><span>{{item.Title}}</span></td>
<td><span>{{item.Grade}}</span></td>
<td><span>{{item.Completed}}</span></td>
<td><span>{{item.DateCompleted}}</span></td>
</tr>
</tbody>
</table>
为了避免在某些值不可用时破坏 table 代码,只需将其放在 span
元素中,这样它仍然会加载 td
而其中没有任何值。