电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

angular4響應式表單與校驗實現demo

瀏覽:265日期:2022-06-10 09:34:41
目錄
  • html文件:
  • ts文件:
  • 校驗文件validators.ts

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響應式表單校驗的資料請關注其它相關文章!

標簽: JavaScript
主站蜘蛛池模板: 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 山西3A认证|太原AAA信用认证|投标AAA信用证书-山西AAA企业信用评级网 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 房间温控器|LonWorks|海思 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 森旺-A级防火板_石英纤维板_不燃抗菌板装饰板_医疗板 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 找果网 | 苹果手机找回方法,苹果iPhone手机丢了找回,认准找果网! | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 高温高压釜(氢化反应釜)百科 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 小型气象站_车载气象站_便携气象站-山东风途物联网 | 飞飞影视_热门电影在线观看_影视大全 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 不发火防静电金属骨料_无机磨石_水泥自流平_修补砂浆厂家「圣威特」 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 碳刷_刷握_集电环_恒压簧_电刷厂家-上海丹臻机电科技有限公司 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 |