Tôi đang đấu tranh để tìm ra một cách để làm điều này. Trong thành phần mẹ, mẫu mô tả a table
và thead
phần tử của nó , nhưng ủy quyền hiển thị tbody
thành phần khác, như thế này:
<table>
<thead>
<tr>
<th>Name</th>
<th>Time</th>
</tr>
</thead>
<tbody *ngFor="let entry of getEntries()">
<my-result [entry]="entry"></my-result>
</tbody>
</table>
Mỗi thành phần myResult hiển thị tr
thẻ riêng của nó , về cơ bản như vậy:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
Lý do tôi không đặt điều này trực tiếp trong thành phần mẹ (tránh sự cần thiết phải có thành phần myResult) là thành phần myResult thực sự phức tạp hơn được hiển thị ở đây, vì vậy tôi muốn đặt hành vi của nó trong một thành phần và tệp riêng biệt.
DOM kết quả trông xấu. Tôi tin rằng điều này là do nó không hợp lệ, vì tbody
chỉ có thể chứa tr
các phần tử (xem MDN) , nhưng DOM được tạo (đơn giản hóa) của tôi là:
<table>
<thead>
<tr>
<th>Name</th>
<th>Time</th>
</tr>
</thead>
<tbody>
<my-result>
<tr>
<td>Bob</td>
<td>128</td>
</tr>
</my-result>
</tbody>
<tbody>
<my-result>
<tr>
<td>Lisa</td>
<td>333</td>
</tr>
</my-result>
</tbody>
</table>
Có cách nào để chúng ta có thể hiển thị cùng một thứ, nhưng không có <my-result>
thẻ gói và trong khi vẫn sử dụng một thành phần chịu trách nhiệm duy nhất cho việc hiển thị một hàng trong bảng không?
Tôi đã xem xét ng-content
, DynamicComponentLoader
thì ViewContainerRef
, nhưng họ dường như không cung cấp một giải pháp này như xa như tôi có thể nhìn thấy.