generated:catalog.entry.forms-guide.title
@xngui/components/form@xngui/components/formgenerated:catalog.entry.forms-guide.description
forms-guide:section.overview
forms-guide:lead.overview
forms-guide:heading.anatomy
forms-guide:paragraph.anatomy
- x-formforms-guide:anatomy.form
- x-form-fieldforms-guide:anatomy.field[formField]forms-guide:anatomy.control
forms-guide:section.write
forms-guide:lead.write
forms-guide:heading.write
forms-guide:paragraph.schema
schema.tsimport { form } from '@angular/forms/signals';import { email, match, required } from '@xngui/components/form';interface ContactModel { name: string; email: string; confirmEmail: string;}const model = signal<ContactModel>({ name: '', email: '', confirmEmail: '' });const contactForm = form(model, (path) => { required(path.name, { message: 'Name is required' }); required(path.email, { message: 'Email is required' }); email(path.email, { message: 'Enter a valid email' }); match(path.confirmEmail, path.email, { message: 'Emails must match' });});forms-guide:paragraph.composition
form.html<x-form [form]="contactForm" validateOn="touched"> <x-form-field label="Name"> <x-input [formField]="contactForm.name" /> </x-form-field> <x-form-field label="Email" hint="We never share your email."> <x-input [formField]="contactForm.email" /> </x-form-field> <x-form-field label="Confirm email"> <x-input [formField]="contactForm.confirmEmail" /> </x-form-field> <x-button type="submit" variant="primary">Submit</x-button></x-form>forms-guide:paragraph.validation-i18n
validators.tsimport { provideX } from '@xngui/core/config';import { provideXTranslations } from '@xngui/core/i18n';export const appConfig = { providers: [ provideX({ i18n: { languages: ['en', 'fa'], defaultLocale: 'en', fallbackLocale: 'en', }, }), provideXTranslations({ 'validation.required': { en: 'This field is required' }, 'validation.email': { en: 'Enter a valid email address' }, }), ],};// x-form resolves validationErrorKey(error) → xTranslate pipe// validationErrorParams(error) supplies {{min}}, {{max}}, …forms-guide:section.fields
forms-guide:lead.fields
forms-guide:heading.label-modes
forms-guide:paragraph.label-modes
labelModeforms-guide:data.cascade-label-mode-valuesforms-guide:data.cascade-label-mode-note
lookforms-guide:data.cascade-look-valuesforms-guide:data.cascade-look-note
sizeforms-guide:data.cascade-size-valuesforms-guide:data.cascade-size-note
densityforms-guide:data.cascade-density-valuesforms-guide:data.cascade-density-note
validateOnforms-guide:data.cascade-validate-on-valuesforms-guide:data.cascade-validate-on-note
forms-guide:section.validators
forms-guide:lead.validators
forms-guide:heading.built-in-validators
required
forms-guide:data.validator-required-note
@angular/forms/signalsemail
forms-guide:data.validator-email-note
@angular/forms/signalsminLength / maxLength
forms-guide:data.validator-length-note
@angular/forms/signalsmin / max
forms-guide:data.validator-bounds-note
@angular/forms/signalspattern
forms-guide:data.validator-pattern-note
@angular/forms/signalsphone
forms-guide:data.validator-phone-note
@xngui/components/formurl
forms-guide:data.validator-url-note
@xngui/components/formmatch
forms-guide:data.validator-match-note
@xngui/components/formoneOf
forms-guide:data.validator-one-of-note
@xngui/components/formforms-guide:paragraph.validators-legacy forms-guide:link.form-demo forms-guide:paragraph.validators-end
forms-guide:section.controls
forms-guide:lead.controls
forms-guide:heading.control-catalog
x-input
forms-guide:data.control-input-note
x-password-input
forms-guide:data.control-password-note
x-number-input
forms-guide:data.control-number-note
x-textarea
forms-guide:data.control-textarea-note
x-checkbox
forms-guide:data.control-checkbox-note
x-switch
forms-guide:data.control-switch-note
x-rate-picker
forms-guide:data.control-rate-picker-note
x-select
forms-guide:data.control-select-note
x-combobox
forms-guide:data.control-combobox-note
x-datepicker
forms-guide:data.control-datepicker-note
forms-guide:paragraph.controls-before-link forms-guide:link.components forms-guide:paragraph.controls-after-link
forms-guide:section.timing
forms-guide:lead.timing
forms-guide:heading.validate-on
forms-guide:paragraph.validation-timing
forms-guide:paragraph.error-summary