ngx-valdemort
Version:
Simple, consistent validation error messages for your Angular forms
121 lines (89 loc) • 4.04 kB
Markdown
[](https://circleci.com/gh/Ninja-Squad/ngx-valdemort)
[](https://codecov.io/gh/Ninja-Squad/ngx-valdemort)
# ngx-valdemort
ngx-valdemort gives you simpler, cleaner validation error messages for your Angular components.
## Why should you care?
If you've ever written forms like the following:
```html
<form [formGroup]="form" (ngSubmit)="submit()" #f="ngForm">
<input formControlName="email" type="email" />
@if (form.controls.email.invalid && (f.submitted || form.controls.email.touched)) {
<div class="invalid-feedback">
@if (form.controls.email.hasError('required')) {
<div>The email is required</div>
}
@if (form.controls.email.hasError('email')) {
<div>The email must be a valid email address</div>
}
</div>
}
<input formControlName="age" type="number" />
@if (form.controls.age.invalid && (f.submitted || form.controls.age.touched)) {
<div class="invalid-feedback">
@if (form.controls.age.hasError('required')) {
<div>The age is required</div>
}
@if (form.controls.age.hasError('min')) {
<div>You must be at least {{ form.controls.age.getError('min').min }} years old</div>
}
</div>
}
<button (click)="submit()">Submit</button>
</form>
```
ngx-valdemort allows writing the above form in a simpler, cleaner way by using the `ValidationErrorsComponent`:
```html
<form [formGroup]="form" (ngSubmit)="submit()">
<input formControlName="email" type="email" />
<val-errors controlName="email">
<ng-template valError="required">The email is required</ng-template>
<ng-template valError="email">The email must be a valid email address</ng-template>
</val-errors>
<input formControlName="age" type="number" />
<val-errors controlName="age">
<ng-template valError="required">The age is required</ng-template>
<ng-template valError="max" let-error="error">You must be at least {{ error.min }} years old</ng-template>
</val-errors>
<button>Submit</button>
</form>
```
Even better, you can define default error messages once, and use them everywhere, while still being able to
override them when needed:
```html
<form [formGroup]="form" (ngSubmit)="submit()">
<input formControlName="email" type="email" />
<val-errors controlName="email" label="The email" />
<input formControlName="age" type="number" />
<val-errors controlName="age" label="The age">
<ng-template valError="max" let-error="error">You must be at least {{ error.min }} years old</ng-template>
</val-errors>
<button>Submit</button>
</form>
```
It works with `ngModel` too!
```html
<input type="email" name="email" [(ngModel)]="user.email" required email #emailCtrl="ngModel" />
<val-errors [control]="emailCtrl.control" label="The email" />
```
Learn more and see it in action on [our web page](https://ngx-valdemort.ninja-squad.com/)
### Experimental support for signal forms
It works with experimental signal forms too! You can use the same directives and components, except for `<val-errors>`
which must be replaced by `<val-signal-errors>`:
```html
<input type="email" [field]="form.email" />
<val-signal-errors [forField]="form.email" label="The email" />
```
## Installation
Using the CLI: `ng add ngx-valdemort`
Using npm: `npm install ngx-valdemort`
Using yarn: `yarn add ngx-valdemort`
## Getting started
- Import `ValdemortModule`, and other needed classes from ngx-valdemort
- Add the module to the imports of your application module
- Use `<val-errors>` in your forms
- Enjoy!
Go further:
- define default error messages using `<val-default-errors>`
- configure the look and feel globally by injecting and customizing the `ValdemortConfig` service
## Issues, questions
Please, provide feedback by filing issues, or by submitting pull requests, to the [Github Project](https://github.com/Ninja-Squad/ngx-valdemort).