angular4响应式表单与校验实现demo

 更新时间:2023年05月12日 09:43:10   作者:xiagh  
这篇文章主要介绍了angular4响应式表单与校验实现demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

html文件:

<form [formGroup]="formModel" (submit)="onSubmit()">
  <h2>响应式表单与校验</h2>
  <div><label>用户名:</label><input  type="text" formControlName="username"/></div>
  <div [hidden]='!formModel.hasError("required","username")'>用户名是必填项</div>
  <!-- required不是校验器的名字,而是失败后返回的对象里的key值 
  * 只要是required有值就认为是错误的,不论是什么值true或者是对象
  * username是想要检查的字段名字
  -->
  <div [hidden]='!formModel.hasError("minlength","username")'>用户名的最小长度是6</div>
  <div><label>手机号:</label><input  type="text" formControlName="mobile"/></div>
  <div [hidden]='!formModel.hasError("mobile","mobile")'>手机号不合法</div>
  <div formGroupName="passwordsGroup">
    <div><label>密码:</label><input  type="password" formControlName="password"/></div>
    <div [hidden]='!formModel.hasError("minlength",["passwordsGroup","password"])'>密码的最小长度是6</div>
    <!-- 这里注意想要校验的字段的写法是一个数组 -->
    <div><label>确认密码:</label><input  type="password" formControlName="pwconfrim"/></div>
    <div [hidden]='!formModel.hasError("equal","passwordsGroup")'>
      {{formModel.getError('equal','passwordsGroup')?.descx}}
       <!-- 可以在校验器中的key值中定义提示语 -->
    </div>
  </div>
  <button type="submit">注册</button>
</form>
<div>
  {{formModel.status}}
</div>

ts文件:

import { Component,OnInit } from '@angular/core';
import { FormGroup,FormControl,FormBuilder,AbstractControl,Validators } from '@angular/forms';
import { validators } from './validator/validators';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
  //校验器就是一个普通的方法,名字随意定,接收一个参数,参数的类型必须是AbstractControl的类型,必须有返回值,返回值的//可以是任意结果的一个对象,对象要求key必须是string类型的,值可以是任意类型的
  // xxxx(control:AbstractControl):{[key:string]:any} {
  //   return null;
  // }
  //校验器可以单独的提取出去,写在validators.ts文件中
  public val:validators;//定义一个validators类型的变量 val
  formModel: FormGroup;
  // constructor(){
  //     this.formModel = new FormGroup({
  //       username: new FormControl(),
  //       moblie: new FormControl(),
  //       passwordsGroup: new FormGroup({
  //         password: new FormControl(),
  //         pwconfrim: new FormControl()
  //       })
  //     });
  // }
  //同上的功能
  //FormBuilder的group方法可以再接收一个额外的方法来做校验,用“,”分开
  //['',,]第一个元素是一个初始值,第二个元素是一个校验方法,第三个元素是异步校验方法
  constructor(fb:FormBuilder){
    this.val = new validators();
    this.formModel =fb.group({
      username: ['',[Validators.required,Validators.minLength(6)]],//['']实例化了一个FormControl,Validators内置表单校验都存储在这里
      mobile: ['',this.val.mobileValidator,this.val.mobileAsyncValidator],
      passwordsGroup: fb.group({
        password:  ['',Validators.minLength(6)],
        pwconfrim:  ['']
      },{validator :this.val.euqalValidator})
    });
}
  onSubmit() { 
    // let isValid: boolean = this.formModel.get("username").valid;
    //符合所有校验规则后,isValid就是true;
    // console.log("username的校验结果是"+isValid);
    // let errors:any = this.formModel.get("username").errors;
    // console.log("username的错误信息是"+JSON.stringify(errors))
    if(this.formModel.valid){ //所有表单都合法才打印表单的值
      console.log(this.formModel.value);
    }
  }
  ngOnInit() {
  }
}

校验文件validators.ts

import { FormControl,FormGroup } from '@angular/forms';
import { Observable } from 'rxjs';
export class validators{
    mobileValidator(control:FormControl):any {
        let myReg = /^1(3|4|5|7|8)+\d{9}$/;
        let valid = myReg.test(control.value);
        console.log("moblie的校验结果是"+valid)
        return valid ? null : {mobile:true};//如果valid是true 返回是null
      }
    //异步校验器,返回的不是对象,而是一个异步校验流
    mobileAsyncValidator(control:FormControl):any {
        let myReg = /^1(3|4|5|7|8)+\d{9}$/;
        let valid = myReg.test(control.value);
        console.log("moblie的校验结果是"+valid)
        return Observable.of(
            valid ? null : {mobile:true}
        ).delay(5000)//延迟5秒  
      }
      euqalValidator(group:FormGroup):any {
        let password :FormControl = group.get("password") as FormControl;
        let pwconfrim :FormControl = group.get("pwconfrim") as FormControl;
        let valid :boolean = (password.value === pwconfrim.value);
        console.log("密码校验结果是"+valid);
        return valid ? null : {equal:{descx:"密码和确认密码不匹配"}};
      }
}

以上就是angular4响应式表单与校验实现demo的详细内容,更多关于angular4响应式表单校验的资料请关注脚本之家其它相关文章!

相关文章

  • Angularjs Promise实例详解

    Angularjs Promise实例详解

    Promise是一个构造函数,自己身上有all、reject、resolve这几个异步方式处理值的方法,原型上有then、catch等同样很眼熟的方法,下面通过实例代码给大家讲解angularjs promise 的相关知识,感兴趣的朋友一起看看吧
    2018-03-03
  • Angular8 实现table表格表头固定效果

    Angular8 实现table表格表头固定效果

    这篇文章主要介绍了Angular8 实现table表格表头固定效果,表头固定,内部实现滚动条效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Angular6 发送手机验证码按钮倒计时效果实现方法

    Angular6 发送手机验证码按钮倒计时效果实现方法

    这篇文章主要介绍了Angular6 发送手机验证码按钮倒计时效果实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • angularjs实现柱状图动态加载的示例

    angularjs实现柱状图动态加载的示例

    本篇文章主要介绍了angularjs实现柱状图动态加载的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • AngularJS通过$http和服务器通信详解

    AngularJS通过$http和服务器通信详解

    相信大家都知道AngularJS是一个前端框架,实现了可交互式的页面,但是对于一个web应用,页面上进行展示的数据从哪里来,肯定需要服务端进行支持,那么AngularJS是如何同服务端进行交互的呢?通过这篇文章大家一起来看看吧。
    2016-09-09
  • AngularJS基础 ng-init 指令简单示例

    AngularJS基础 ng-init 指令简单示例

    本文主要介绍AngularJS ng-init 指令,这里帮大家整理了关于ng-init 指令的基本知识资料,并附有简单的代码示例,有需要学习的小伙伴可以参考下
    2016-08-08
  • AngularJS入门教程之过滤器详解

    AngularJS入门教程之过滤器详解

    本文主要讲解AngularJS 过滤器,这里整理了过滤器的相关资料并附示例代码,帮助大家学习AngularJS的知识,有需要的小伙伴可以参考下
    2016-08-08
  • angular2中router路由跳转navigate的使用与刷新页面问题详解

    angular2中router路由跳转navigate的使用与刷新页面问题详解

    这篇文章主要给大家介绍了angular2中router路由跳转navigate的使用与刷新页面问题的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 详解webpack+es6+angular1.x项目构建

    详解webpack+es6+angular1.x项目构建

    这篇文章主要介绍了详解webpack+es6+angular1.x项目构建, 小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • angularjs之$timeout指令详解

    angularjs之$timeout指令详解

    本篇文章主要主要介绍了angularjs之$timeout指令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论