Olá, Bianca! Tudo bom, e aí?
Você pode usar a diretiva NgForOf
. Diretivas são soluções do Angular que adicionam comportamento para elementos.
No caso da NgForOf
, baseada em uma coleção (geralmente uma array), o componente é replicado para cada elemento da coleção. Você pode usá-la com *ngFor
, como abaixo:
<td *ngFor="let linha of linhas">
<label> Nome:</label>
<input type="text" id="fname">
<button id="Adicionar"> Adicionar nome </button>
</td>
O que estamos fazendo: para cada item da array linhas
, que decidimos chamar de linha
, crie essa <td>
. Vamos olhar mais a fundo na sintaxe:
<td *ngFor="let <nome-do-item> of <nome-da-array> >
O <nome-do-item>
você define no momento da criação do ngFor
, isso é útil para caso você queira referenciar esse item, por exemplo:
<td *ngFor="let linha of linhas">
<p>{{ linha.valor }}</p>
</td>
Nesse caso, teríamos uma array (definida no nosso .component.ts
) chamada linhas
, e para trabalhar com cada item, vamos chamar o item do loop de linha
. Cada item da array possui uma propriedade valor
({ valor: 'algum valor' }
) e para extrair o conteúdo dessa variável para o HTML usamos o {{ }}
.
Note que, para isso funcionar, você precisa passar uma array que exista no .component.ts
.
Certo, agora para o comportamento de replicação:
No Angular, podemos escutar eventos com (<nome-do-evento>)
, por exemplo, se quisermos escutar um click, podemos usar (click)
, e com base nisso executar um método do componente.
<td *ngFor="let linha of linhas">
<label> Nome:</label>
<input type="text" id="fname">
<button id="Adicionar" (click)="addNome()"> Adicionar nome </button>
</td>
De novo, esse método precisa existir no componente. O método em si precisa adicionar um item na array que o ngFor
usa. O componente ficará assim:
export class AppComponent {
linhas = ['']; // precisamos adicionar uma string vazia, porque se inicializarmos a array vazia, o elemento não será apresentado
addNome() {
this.linhas.push(''); // adicionamos uma string vazia
}
}
Atenção: Para usar a diretiva ngFor
, você precisa ter importado o módulo CommonModule
no módulo do seu componente.
Espero ter ajudado!