Categorias do Site

Guia Completo do Angular FormArray

Aprenda a usar o FormArray do Angular para criar formulários dinâmicos e manipular dados em aplicativos web.

Ilustração mostrando um layout estilizado de interface de usuário com barras de progresso, botões e caixas de diálogo em tons de azul e roxo sobre um fundo escuro com pontos luminosos.

Gerenciar dados estruturados e dinâmicos é um desafio comum em aplicativos web modernos. O FormArray do Angular é uma ferramenta poderosa para essa finalidade.

A Deep Dive Into Angular’s FormArray Container

O FormArray facilita a criação e gestão de linhas e colunas dinâmicas de campos de entrada, permitindo interfaces semelhantes a planilhas.

Neste guia, você aprenderá a:

  • Carregar e analisar dados CSV em um formato estruturado
  • Gerar controles de formulário dinamicamente usando o FormArray do Angular
  • Adicionar regras de validação para garantir a precisão dos dados
  • Permitir que os usuários baixem dados modificados como um arquivo CSV

Ao final deste guia, você terá um aplicativo pseudo-planilha funcional e uma forte compreensão de como os formulários reativos do Angular simplificam o manuseio de dados complexos e dinâmicos.

Configurando o projeto Angular

Para começar, certifique-se de ter o Node.js e o Angular CLI instalados. Para criar um novo projeto Angular, execute o seguinte comando:

ng new dynamic-formarray-app

Durante a configuração, habilite o roteamento e escolha seu pré-processador CSS preferido. Após a criação do projeto, navegue até a pasta do projeto e instale as dependências necessárias, incluindo o Bootstrap para estilização:

npm install bootstrap

Adicione o Bootstrap em angular.json no array styles:

 "styles": ["node_modules/bootstrap/dist/css/bootstrap.min.css","src/styles.css"]

Adicione o PapaParse para uma análise robusta de CSV:

 npm install papaparse

Finalmente, gere um novo componente para a interface da planilha:

ng generate component components/spreadsheet

Carregando e analisando dados CSV

Para gerar controles de formulário dinamicamente, precisamos primeiro carregar e analisar um arquivo CSV. Adicione um elemento de entrada de arquivo ao seu template:




No arquivo de componente (spreadsheet.component.ts), use o FormBuilder do Angular e o PapaParse para processar o arquivo enviado:

import { Component, OnInit } from '@angular/core';
import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
import * as Papa from 'papaparse';

@Component({
selector: 'app-spreadsheet',
templateUrl: './spreadsheet.component.html',
styleUrls: ['./spreadsheet.component.css']
})
export class SpreadsheetComponent implements OnInit {
spreadsheetForm!: FormGroup;

constructor(private fb: FormBuilder) {}

ngOnInit(): void {
this.spreadsheetForm = this.fb.group({ rows: this.fb.array([]) });
}

get formArray(): FormArray {
return this.spreadsheetForm.get('rows') as FormArray;
}

onFileUpload(event: Event): void {
const file = (event.target as HTMLInputElement).files?.[0];
if (file) {
Papa.parse(file, {
complete: (result) => this.loadCsvData(result.data),
skipEmptyLines: true
});
}
}

loadCsvData(data: any[]): void {
const rows = this.formArray;
rows.clear();
data.forEach((row) => {
const formRow = this.fb.array(row.map((value: string) => this.fb.control(value, Validators.required)));
rows.push(formRow);
});
}
}

Renderizando dados CSV dinamicamente

Após analisar os dados, o próximo passo é renderizá-los dinamicamente em uma grade que imita uma planilha. Cada linha no FormArray corresponde a uma matriz de FormControl.

No template (spreadsheet.component.html), use diretivas estruturais do Angular para exibir linhas e células:






This field is required.



Adicionando regras de validação

A validação garante que a entrada atenda a critérios específicos. O Angular suporta validadores internos como Validators.required e permite lógica de validação personalizada.

Validador numérico personalizado

Crie um validador personalizado para garantir a entrada numérica:

function validateNumeric(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
const value = control.value;
return isNaN(value) || value.trim() === '' ? { numeric: true } : null;
};
}

Atualize o método loadCsvData para incluir este validador:

loadCsvData(data: any[]): void {
const rows = this.formArray;
rows.clear();
data.forEach((row) => {
const formRow = this.fb.array(row.map((value: string) => this.fb.control(value, [Validators.required, validateNumeric()])));
rows.push(formRow);
});
}

Exportando dados modificados

Uma vez que o usuário modifica o formulário, permita que ele baixe os dados atualizados como um arquivo CSV usando a API Blob.

Eis o código para a exportação do CSV:

downloadCsv(): void {
const headers = ['Column 1', 'Column 2', 'Column 3'];
const rows = this.formArray.controls.map((row) =>
(row as FormArray).controls.map((control) => control.value)
);

const csvArray = [headers, ...rows];
const csvData = csvArray.map((row) => row.join(',')).join('n');

const blob = new Blob([csvData], { type: 'text/csv;charset=utf-8;' });
const url = window.URL.createObjectURL(blob);

const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'modified-data.csv');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
}

Adicionando botão de download

Finalmente, incluiremos um botão no template para acionar o download:

Conclusão

Ao seguir este guia, você aprendeu a:

  • Analisar arquivos CSV e vincular os dados dinamicamente ao FormArray do Angular
  • Validar a entrada do usuário usando validadores internos e personalizados
  • Exportar dados modificados de volta para um formato CSV

Esta solução é altamente adaptável, tornando-se adequada para vários cenários do mundo real, como grades de dados, pesquisas ou planilhas interativas.

Feliz codificação!

  • Enfrentando a Complexidade com GraphQL

    Descubra como GraphQL facilita o desenvolvimento de soluções inteligentes com IA.

    Descubra como GraphQL facilita o desenvolvimento de soluções inteligentes com IA.

    Ler notícia completa
    Banner de podcast da UX Magazine intitulado
  • UX: Emoções Além das Telas no Design

    Descubra como o design emocional transforma experiências, indo além das telas e criando conexões humanas.

    Descubra como o design emocional transforma experiências, indo além das telas e criando conexões humanas.

    Ler notícia completa
    Símbolo abstrato em tons de marrom e laranja que se assemelha a uma pessoa estilizada com braços estendidos e uma perna erguida.
  • Como usar CSS line-clamp para limitar texto

    Aprenda a usar a propriedade CSS line-clamp para limitar linhas de texto e melhorar a aparência do layout.

    Aprenda a usar a propriedade CSS line-clamp para limitar linhas de texto e melhorar a aparência do layout.

    Ler notícia completa
    Fundo gradiente em tons de laranja e violeta com o texto
  • Promise.all ainda é relevante em 2025?

    Antes das promises serem introduzidas nativamente no JavaScript, usávamos muitos callbacks para tarefas assíncronas. É comum ver callbacks sendo usados, pois muitos desenvolvedores podem ainda pensar que callbacks e promises são o mesmo, mas não são. Quando promises foram introduzidas, substituíram amplamente os callbacks, tornando a sintaxe mais compreensível. Em 2025, com async/await, Promise.allSettled, Promise.any […]

    Promise.all é crucial para tarefas assíncronas, mas novas alternativas surgem em 2025. Saiba quando usá-lo.

    Ler notícia completa
    Logotipo do JavaScript (JS) em quadrado amarelo sobre fundo com ondas suaves em tons de branco e cinza claro.
  • Equilibrando IA e UX: O Desafio do Design Humanizado

    A IA está sendo integrada aos fluxos de trabalho de design modernos, ajudando na geração de conteúdo, ideação e prototipagem. Isso aumenta a eficiência das equipes de design, aprimorando a forma como criamos, pensamos e resolvemos problemas. No entanto, a IA também traz preocupações ao processo de design, como a possível perda de foco no […]

    Descubra como manter o design UX humanizado enquanto utiliza IA para otimizar processos e aumentar a produtividade.

    Ler notícia completa
    Mão robótica branca tocando a ponta do dedo de uma mão humana contra um fundo colorido em tons de arco-íris.
  • A Revolução dos Navegadores com IA: Impactos e Futuro

    Há uma revolução silenciosa ocorrendo em um software que você usa diariamente, mas raramente pensa sobre: o navegador. Chrome, Safari, Firefox têm sido nossas janelas para a web por décadas. Agora, algo significativo está acontecendo. Uma nova espécie de navegador está surgindo: o navegador com IA. Ele não apenas muda como navegamos, mas redefine o […]

    Navegadores com IA estão mudando a web, impactando a criatividade, economia e verdade online.

    Ler notícia completa
    Tela de interface do Instacart mostrando produtos essenciais para praia à venda, como protetor solar e toalhas, com uma janela de chat com o assistente virtual aberta.
  • As 3 previsões para o futuro do design UX

    A evolução tecnológica moderniza e melhora todas as áreas da tecnologia, incluindo o design de dispositivos digitais, automação, desenvolvimento de software e design UI/UX. Essa evolução e as inovações em HCI (Interação Humano-Computador) impulsionam o design UI/UX para ajudar designers a criar produtos digitais mais amigáveis, usáveis e produtivos para todos os usuários. O design […]

    Confira as três principais previsões para a próxima era do design UX e como elas podem impactar o futuro das interfaces digitais.

    Ler notícia completa
    Ilustração em 3D de um computador desktop moderno com ícones em estilo futurista na tela, sobre fundo roxo com linhas de rede digitais.
  • A Importância do Enquadramento no Design

    No design, o enquadramento do problema está se tornando o cerne do papel humano. À medida que a IA, ou o que chamo de Programa, assume mais o trabalho de solução, nosso ofício muda para como tratamos o problema. “A IA não está substituindo designers; está substituindo designers que focam em saídas automatizáveis.” Citação e […]

    Explorando como o enquadramento de problemas redefine o papel humano no design em tempos de IA.

    Ler notícia completa
    Imagem de rabisco em preto e branco cheia de palavras e desenhos, incluindo cabeças estilizadas, uma palavra
  • Psicologia Ética no E-commerce: Facilite Compras

    A psicologia no e-commerce tem uma má reputação, muitas vezes associada a táticas de manipulação como escassez artificial e cobranças ocultas. No entanto, existe um lado positivo: a facilitação das compras sem manipulação. Trabalhando anos com e-commerce, percebi que a maioria dos problemas de conversão está em facilitar o processo de compra. Vou mostrar quatro […]

    Aprenda como remover barreiras psicológicas no e-commerce, promovendo compras éticas sem manipulação.

    Ler notícia completa
    Ilustração de um trator removendo neve da estrada, com carros vermelhos parcialmente cobertos de neve ao lado. Ambiente frio com árvores ao fundo.