Makuco UI
ComponentesData Entry & Selection

Formulários com Angular

Como integrar componentes de entrada do Makuco UI com Angular Forms (Template-driven e Reactive Forms).

Os componentes de entrada do Makuco UI (mk-input, mk-select, mk-checkbox, mk-input-otp) são form-associated — implementam a API ElementInternals e participam nativamente de submissões de formulário HTML.

No Angular, a integração com o sistema de formulários (ngModel / FormControl) requer o uso dos Modules em vez dos Components standalone.

Component vs Module

Cada componente de entrada é exportado em dois formatos:

ExportaçãoQuando usar
MkInputComponentRenderização simples, sem binding de formulário
MkInputModuleCom ngModel, formControl ou formControlName

O Module inclui a diretiva ControlValueAccessor que conecta o web component ao ciclo de detecção de mudanças e validação do Angular Forms.

Atenção

Usar MkInputComponent com formControl não emite erros em tempo de desenvolvimento, mas os valores não são sincronizados com o formulário. Sempre use o Module correspondente em contextos de formulário.

Template-driven Forms

import { Component } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { MkInputModule, MkSelectModule, MkCheckboxModule } from '@db1/makuco-ui-angular';

@Component({
  standalone: true,
  imports: [FormsModule, MkInputModule, MkSelectModule, MkCheckboxModule],
  template: `
    <form #form="ngForm" (ngSubmit)="onSubmit(form)">
      <mk-input label="Nome" [(ngModel)]="name" name="name" required />
      <mk-select label="Perfil" [(ngModel)]="role" name="role" />
      <mk-checkbox label="Aceito os termos" [(ngModel)]="terms" name="terms" />
      <button type="submit">Enviar</button>
    </form>
  `,
})
export class TemplateDrivenExample {
  name = '';
  role = '';
  terms = false;

  onSubmit(form: NgForm) {
    if (form.valid) console.log(form.value);
  }
}

Reactive Forms

import { Component } from '@angular/core';
import { ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';
import { MkInputModule, MkSelectModule, MkCheckboxModule } from '@db1/makuco-ui-angular';

@Component({
  standalone: true,
  imports: [ReactiveFormsModule, MkInputModule, MkSelectModule, MkCheckboxModule],
  template: `
    <form [formGroup]="form" (ngSubmit)="onSubmit()">
      <mk-input label="E-mail" formControlName="email" />
      <mk-select label="Perfil" formControlName="role" />
      <mk-checkbox label="Aceito os termos" formControlName="terms" />
      <button type="submit" [disabled]="form.invalid">Enviar</button>
    </form>
  `,
})
export class ReactiveExample {
  form = new FormGroup({
    email: new FormControl('', [Validators.required, Validators.email]),
    role: new FormControl(''),
    terms: new FormControl(false, Validators.requiredTrue),
  });

  onSubmit() {
    if (this.form.valid) console.log(this.form.value);
  }
}

Referência de Modules

ComponenteModule para Forms
mk-inputMkInputModule
mk-selectMkSelectModule
mk-checkboxMkCheckboxModule
mk-input-otpMkInputOtpModule

On this page