Ich kämpfe darum, einen Weg zu finden, dies zu tun. In einer übergeordneten Komponente beschreibt die Vorlage ein tableund sein theadElement, delegiert das Rendern jedoch tbodyan eine andere Komponente wie folgt:
<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>
Jede myResult-Komponente rendert im trGrunde genommen ein eigenes Tag:
<tr>
<td>{{ entry.name }}</td>
<td>{{ entry.time }}</td>
</tr>
Der Grund, warum ich dies nicht direkt in die übergeordnete Komponente einfüge (ohne dass eine myResult-Komponente erforderlich ist), ist, dass die myResult-Komponente tatsächlich komplizierter ist als hier gezeigt. Daher möchte ich ihr Verhalten in eine separate Komponente und Datei einfügen.
Das resultierende DOM sieht schlecht aus. Ich glaube, das liegt daran, dass es ungültig ist, da tbodyes nur trElemente enthalten kann (siehe MDN) , aber mein generiertes (vereinfachtes) DOM ist:
<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>
Gibt es eine Möglichkeit, dasselbe zu rendern, aber ohne die Umhüllung? <my-result> zu rendern Tag, und während weiterhin eine Komponente verwenden, um allein für das Rendern einer Tabellenzeile verantwortlich zu sein?
Ich habe betrachtet ng-content, DynamicComponentLoaderdie ViewContainerRef, aber sie scheinen nicht , eine Lösung für diese zu schaffen , soweit ich sehen kann.