这里使用的是模型驱动的表单

1、app.module.ts

import { ReactiveFormsModule } from '@angular/forms';

@NgModule({
...
imports: [ReactiveFormsModule, ...],
...
})
export class AppModule{
}

文件中加入了ReactiveFormsModule模块,它是使用模型驱动表单所必须的。

2、app.component.ts

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms'; @Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
name: string
score: number;
formData: any; constructor() { } ngOnInit() {
this.formData = new FormGroup({
name: new FormControl(this.name, Validators.compose([
Validators.required,
])),
score: new FormControl(this.score, Validators.compose([
Validators.required,
this.scoreValueValidator
]))
});
} scoreValueValidator(control: FormControl): any {
if (control.value < 0 || control.value > 100) {
return { value: {info: '分数必须大于等于0,小于等于100'} };
}
} onsubmit(data: any) {
this.name= data.name;
this.score = data.score
} }

表单验证,可以使用内置的表单验证,也可以使用自定义验证方法。

(1)  内置表单验证。

Validators是angular内置的验证器模块,可以使用它实现强制字段、最小长度、最大长度和模式等,我这里设置了name和score是强制字段,当然,你可以加入Validators.minLength(6), Validators.maxLength(10),Validators.pattern("[^ @]*@[^ @]*")等等。

(2)  自定义表单验证。

scoreValueValidator是自定义的验证方法,用于验证分数是否大于等于0,小于等于100,传递的参数是当前需要验证的表单的FormControl,通过control.value可以拿到输入的分数值。

3、app.component.html

<div class="container">
<form [formGroup] = "formData" (ngSubmit) = "onsubmit(formData.value)">
<div class="form-group">
<label for="name">姓名</label>
<em>*</em>
<input type="text" class="form-control" formControlName="name" id="name">
<div [hidden]="formData.get('name').valid || formData.get('name').untouched" class="small">
<p [hidden]="!formData.hasError('required', 'threshold')">必填项</p>
</div>
</div>
<div class="form-group">
<label for="score">分数</label>
<em>*</em>
<input type="number" min="0" max="100" class="form-control" formControlName="score" id="score">
<div [hidden]="formData.get('score').valid || formData.get('score').untouched" class="small">
<p [hidden]="!formData.hasError('required', 'score')">必填项</p>
<p [hidden]="!formData.hasError('value', 'score')">{{formData.getError('value', 'score')?.info}}</p>
</div>
<button type="submit" [disabled]="!formData.valid" class="btn btn-sm btn-primary">提交</button>
</form>
</div>

页面中显示错误信息

对于提交按钮,我们已经在方括号中添加了disabled,它被赋予值 !formData.valid。因此,如果formData.valid无效,按钮将保持禁用状态,用户将无法提交它。

4、app.component.css

em {
color:red;
margin-left: 0.25em
}
.ng-touched:not(form),.ng-invalid:not(form) {
border: 1px solid #f00;
}
.ng-valid:not(form),.ng-untouched:not(form) {
border: 1px solid #ddd;
}
p{
color:#f00;
}

最新文章

  1. Debian7下初次尝试Nginx+Uwsgi部署Django开发环境
  2. PHP的命名空间
  3. VB6.0和VB.Net的函数等对照表
  4. leetcode95 Unique Binary Search Trees II
  5. Android开发中的PhoneGap基本使用
  6. Apache安装完服务没有安装的情况
  7. ortoiseSVN无法编辑日志信息的解决方法
  8. DIV 居中对齐
  9. codeigniter 操作mysql的PHP代码--更新
  10. 阿里巴巴开源的Asynchronous I/O Design and Implementation
  11. 在Linux下误删文件后恢复【转】
  12. Java内存管理知识你需要吗?
  13. 返回标签数据示例 (PHP)
  14. Oracle 用户解锁
  15. python int函数转换浮点型字符串的坑???
  16. 撩课-Python-每天5道面试题-第8天
  17. C++之高级编程20170914
  18. Scala实战高手****第9课:Scala类和对象彻底实战和Spark源码鉴赏
  19. ARC管理内存(一)
  20. tp后台注册登录配置项

热门文章

  1. python使用execjs执行含有document、window等对象的js代码,使用jsdom解决
  2. ISODATA聚类算法的matlab程序
  3. Redis学习笔记(六、哨兵)
  4. pytest-2:allure 的安装、使用
  5. HTTP 与HTTPS 简单理解
  6. MySQL学习笔记7——约束
  7. 【新特性速递】优化Shift/Ctrl行多选逻辑,和Windows的文件资源管理器保持一致!
  8. docker 通过中间镜像加速部署
  9. 三、Spring注解之@Import
  10. centos6 升级Git版本