Criando um repetidor dinâmico com transclusão de conteúdo ng com Angular2
O que estou tentando obter é um componente genérico vinculado a uma matriz de objetos arbitrários que permite adicionar e remover linhas dinamicamente quando a exibição de cada linha também é arbitrariamente definida com componentes por um componente mestre que a utiliza.
Observe queMasterComponent é um componente arbitrário que seria implementado para páginas diferentes e deve ser independente e não definido por nenhum metadado ou fonte externa.
O que tenho até agora são os seguintes componentes:
RepeaterComponent template:
<input type="button" value="Add" (click)="addRow()">
<div class="repeater" *ngFor="let row of repeaterArray">
<div class="repeaterRow">
<input type="button" value="Remove" (click)="removeRow(row.rowId)">
<ng-content select="row"></ng-content>
</div>
</div>
Modelo MasterComponent:
<repeater [repeaterArray]="repeaterObj">
<row>
<field-textbox [data]="row.name" [label]="'Name'"></field-textbox>
<field-textbox [data]="row.description" [label]="'Description'"></field-textbox>
</row>
</repeater>
o<field-textbox>
component é um componente personalizado que eu uso para encapsular entradas simples que contêm alguns dados adicionais que eu preciso usar.
oMasterComponent mantém um objeto que, para esta instância, se parece com isso:
repeaterObj = [
{
"rowId": 1,
"name": "First brand",
"description": "First description"
},
{
"rowId": 2,
"name": "Second brand",
"description": "Second description"
},
{
"rowId": 3,
"name": "Third brand",
"description": "Third description"
}
];
Essa abordagem tem dois problemas para os quais não consigo encontrar uma solução.
O seletor de conteúdo ng é idêntico para todas as linhas quando o ngFor duplica o modelo, o que me deixa com apenas umng-content
ponto de transclusão após a renderização.Não há referência aolinha variável da declaração ngFor no<field-textbox>
diretivas transcluídas, então não consigo vincular os dados corretamente.Existe uma abordagem melhor para implementar oRepeaterComponent isso me daria o mínimo de esforço para criar mais novasMasterComponents de diferentes estruturas arbitrárias e modelos diferentes?