Angular Form FormsModule
Form module
Form is one of important component in webpage.
Angular prepares 2 types of Form module.
- FormsModule – General from
- ReactiveFormsModule – Model driven form
In this time, explain about FormsModule.
Form
There are several things we covered in this sample.
- Model
- Submit method
- Form status
- Validation
Sample
app.component.ts
import { Component } from '@angular/core'; import { User } from './user'; @Component({ selector: 'app-root', template: ` <form #testForm="ngForm" (ngSubmit)="show()" novalidate> <div> <label for="mail">Email :</label><br /> <input id="mail" name="mail" type="email" [(ngModel)]="user.mail" #mail="ngModel" required email /> <span *ngIf="mail?.errors?.required"> *required </span> <span *ngIf="mail?.errors?.email"> Invalid email address </span> </div> <div> <label for="passwd">Password :</label><br /> <input id="passwd" name="passwd" type="password" [(ngModel)]="user.passwd" required minlength="6" #passwd="ngModel"/> <span *ngIf="passwd?.errors?.required && passwd.dirty"> <!-- dirty is needed --> *required </span> <span *ngIf="passwd?.errors?.minlength"> Password should be more than 6 characters </span> </div> <div> <label for="name">Name :</label><br /> <input id="name" name="name" type="text" [(ngModel)]="user.name" required minlength="3" maxlength="10" #name="ngModel"/> <span *ngIf="name?.errors?.required"> *required </span> <span *ngIf="name?.errors?.minlength"> Name is more than 3 </span> <span *ngIf="name?.errors?.maxlength"> Name is less than 10 </span> </div> <div> <label for="memo">Memo :</label><br /> <textarea id="memo" name="memo" rows="5" cols="30" [(ngModel)]="user.memo" maxlength="10" #memo="ngModel"></textarea> <span *ngIf="memo?.errors?.maxlength"> Memo is less than 10 </span> </div> <div> <input type="submit" value="Submit" [disabled]="testForm.invalid || testForm.submitted"/> <input type="reset" value="Reset" [disabled]="testForm.pristine"/> </div> <pre>{{testForm.value | json}}</pre> </form> `, styleUrls: ['./app.component.css'] }) export class AppComponent { user = new User('ito@110.com', 'DJ Ito'); show() { alert(this.user.name); } }
novalidate disabled HTML5 validation(to use Angular validation)
user.ts
export class User { mail: string; passwd: string; name: string; memo: string; constructor(mail, name) { this.mail = mail; this.name = name; } }
app.component.css
input.ng-dirty.ng-invalid { background-color: #fee; }
app.module.ts
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { AppComponent } from './app.component'; @NgModule({ imports: [ CommonModule, BrowserModule, FormsModule ], declarations: [ AppComponent, ], bootstrap: [ AppComponent ] }) export class AppModule { }
Memo : You can import both FormsModule and ReactiveFormsModule (no conflicts)
We need FormsModule
CSS Override
Following css can be modified from your own css.
Name |
---|
ng-valid |
ng-invalid |
ng-pristine |
ng-dirty |
ng-touched |
ng-untouched |
ng-submitted |