Essa biblioteca oferece uma maneira bastante simples de mostrar os erros de validação de um formulário. Sem precisar ficar repetindo códigos, e de uma maneira bastante customizável.
- Instale a biblioteca:
npm i @higorcavalcanti/error-validation
- Atualize o
AppModule
e adicione oErrorValidationModule
na seção deimports
:
@NgModule({
declarations: [ AppComponent ],
imports: [
// ...
ErrorValidationModule.forRoot({
messages: {
required: 'Required field!',
email: 'Invalid Email!',
min: ({actual, min}) => `Value ${actual} must be higher than ${min}`
}
}),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Por padrão, será validado todos os formulários do sistema.
É possível desativar a validação automática alterando a propriedade validateAllInputs: false
ao importar o ErrorValidationModule
no AppModule
:
// ...
ErrorValidationModule.forRoot({
validateAllInputs: false,
messages: { ... }
})
Dessa forma, será necessário utilizar em todos os formulários que se desejar validar a diretiva errorValidation
:
<form [formGroup]="form" errorValidation> <!-- Observe a diretiva -->
<div>
<label for="input1">Input1: </label>
<input type="text" formControlName="input1" id="input1"/>
</div>
<div>
<label for="input2">Input2: </label>
<input type="text" formControlName="input2" id="input2"/>
</div>
</form>
Também é possível limitar a quantidade de erros que são exibidos por vêz.
Por padrão, serão exibidos todos os erros.
Bastando apenas alterar a propriedade maxErrors: number
:
// ...
ErrorValidationModule.forRoot({
maxErrors: 1, // ou null para mostrar todos
messages: { ... }
})
Também é possível desativar a validação de apenas alguns inputs.
Bastando apenas utilizar a diretiva ignoreErrorValidation
no input desejado:
<form [formGroup]="form">
<div>
<label for="input1">Input com validação: </label>
<input type="text" formControlName="input1" id="input1"/>
</div>
<div>
<label for="input2">Input sem validação: </label>
<input type="text" formControlName="input2" id="input2" ignoreErrorValidation/> <!-- Observe a diretiva -->
</div>
</form>