Angular 从零开始 4- form表单验证

一. 表单简介
/*

所有的表单元素需要加上name属性

		如果要验证怎么办?
	 */

二 模版驱动型表单 & 表单校验
// 支持双向数据绑定、变更检测、验证和错误处理

步骤:
	1. novalidate 禁用浏览器默认验证
	2. 引入 FormsModule
	3. #anyName= "ngForm" (使用 # 把表单指令对象导出到 anyName这个可引用变量中)
		NgForm指令:Angular会在<form>标签上自动创建并附加一个NgForm指令。它会控制那些带有ngModel指令和name属性的元素,监听他们的属性(包括其有效性)。

		 可以做以下效果:
		 给某个设置required
		 // <button type="submit" [disabled]="anyName.invalid" (click)="handle(anyName.value)">Sign up</button>

	4. 给每个表单元素设置FormControl    #name="ngModel"
		/*
			<div [hidden]="name.valid || name.pristine"
			     class="alert alert-danger">
			  Name is required
			</div>
		 */
		状态字段如下:
		 name.touched 控件被访问过。
		 name.untouched 控件未被访问过。
		 name.dirty 控件的值变化了。
		 name.pristine 控件的值未变化。
		 name.valid 控件的值有效
		 name.invalid 控件的值无效

		 name.errors 错误信息  {{name.errors | json}}


		 /*
		 		一个demo

		 		<form novalidate #anyName="ngForm">
				  <input id="name" name="name" class="form-control"
				         required minlength="4" pattern="[a-z]{6,}"
				         [(ngModel)]="hero.name" #name="ngModel" >
				  <div *ngIf="name.invalid && (name.dirty || name.touched)" class="alert alert-danger">
				    <div *ngIf="name.errors.required">
				      Name is required.
				    </div>
				    <div *ngIf="name.errors.minlength">
				      Name must be at least 4 characters long.
				    </div>
				     <div *ngIf="name.errors.pattern">
				      pattern not match

				    </div>
				  </div>
				</form>

		  */

三 响应式表单 & 表单校验

步骤:
	1. novalidate 禁用浏览器默认验证
	2. import {ReactiveFormsModule} from "@angular/forms";
	   引入 ReactiveFormsModule
	3  区别

	   (1)表单多了一个指令 [formGroup]="user"
	   (2)去掉了对表单的引用 #f="ngForm"
       (3)每个控件多了一个 formControlName
	   (4)每个控件也去掉了验证条件,比如 required、minlength 等


	/*
	
	 	一个domo:

			import { FormControl, FormGroup, Validators } from "@angular/forms";


			this.user = new FormGroup({
  				username: new FormControl('', [Validators.required,Validators.minLength(4), Validators.pattern(/^[a-z]{6,}$/)]),
  				//password: new FormControl('', [Validators.required]),
 			});


			
			<form [formGroup]="user" >
			  <label>
			    <span>用户名</span>
			    <input type="text" formControlName="username" placeholder="请输入您的 名字">
			  </label>
			  <div *ngIf="user.get('username').hasError('required') && user.get('username').touched" class="error">
			    username 是必填项
			  </div>
			  <div *ngIf="user.get('username').hasError('minlength') && user.get('username').touched" class="error">
			    username 长度要大于4
			  </div>
			  <div *ngIf="user.get('username').hasError('pattern') && user.get('username').touched" class="error">
			    username 格式不正确
			  </div>
				<button type="submit" [disabled]="user.invalid" (click)="handle(user.value)">Sign up</button>
			</form>


	 */
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值