美文网首页
8.模板式表单校验

8.模板式表单校验

作者: Monee121 | 来源:发表于2018-03-06 12:55 被阅读0次

模板式表单只能将校验方法包装成指令。
步骤1:

ng g directive  directives/mobileValidator
ng g directive  directives/equalValidator

步骤2:

指令没有模板,在selector里写名字,模板引用。提供了一些校验器,有对应的指令,写到模板上,为了 区分指令和属性,所以要写noValidator.不要启动游览器默认的表单校验。

@Directive({
  selector: '[appMobileValidator]',
  providers: [{provide: NG_VALIDATORS, useValue: mobileValidator, multi: true}]
  /*校验器的token的NG_VALIDATORS,写死;校验方法的名字,multi等于true*/
})
export class MobileValidatorDirective {

  constructor() { }

}
import { Directive } from '@angular/core';
import {NG_VALIDATORS} from '@angular/forms';
import {equalValidator, mobileValidator} from '../validator/Validators';

@Directive({
  selector: '[appEqualValidator]',
  providers: [{provide: NG_VALIDATORS, useValue: equalValidator, multi: true}]
  /*multi:一个token挂多个值*/
})
export class EqualValidatorDirective {

  constructor() { }

}

步骤3:
指令为模板表单加上了校验,模板式表单没有数据模型,想着代码里了解信息,需要从模板传入控制器。提交表单,想知道表单是否有效,提交方法里传入myForm.Valid,在提交方法里判断这个属性。

<form #myForm="ngForm" (ngSubmit)="onSubmit(myForm.value,myForm.valid)" noValidator>
  <div>用户名:<input  ngModel  required minlength="6" type="text" name="username" (input)="onMobileInput(myForm)" /></div>

  <div>手机号:<input ngModel appMobileValidator type="text" name="mobile"/></div>

   <div ngModelGroup="passwordGroup" appEqualValidator>
     <div>密码:<input ngModel type="password" minlength="6" name="password"/></div>
  
     <div>确认密码:<input ngModel type="password" name="confirmpass"/></div>
   
    </div>
  </div>
  <div><input type="submit" value="提交"/></div>
</form>
onSubmit(value: any, valid: boolean) {
    console.log(valid);
   console.log(value);
  }

通过指令,校验逻辑加上完成。
步骤4:
控制错误信息是否显示,要用 hasError,得用myForm.form.hasError.

用状态属性控制它是否显示
在模板表单,不能用状态属性
模板表单和响应式不同。模型的值和状态的变更时异步的,用同步的方式访问这些属性就会报错。

<form #myForm="ngForm" (ngSubmit)="onSubmit(myForm.value,myForm.valid)" novalidator>
  <div>用户名:<input  ngModel  required minlength="6" type="text" name="username" (input)="onMobileInput(myForm)" /></div>
  <div [hidden]="mobileValid || mobileUntouched"><!--控制整体的错误信息是显示还是不显示,用户信息通过或者用户名输入框获取焦-->
    <div [hidden]="!myForm.form.hasError('required','username')">用户名是必填项</div>
    <div [hidden]="!myForm.form.hasError('minlength','username')">用户名最新长度是6</div>
  </div>

  <div>手机号:<input ngModel appMobileValidator type="text" name="mobile"/></div>
   <div [hidden]="myForm.form.get('mobile').valid || myForm.form.get('mobile').pristine">
    <div [hidden]="!myForm.form.hasError('mobile','mobile')">请输入正确的手机号</div>
   </div>

  <div ngModelGroup="passwordGroup" appEqualValidator>
     <div>密码:<input ngModel type="password" minlength="6" name="password"/></div>
    <div [hidden] = "!myForm.form.hasError('minlength', ['passwordsGroup', 'password'])">密码最小长度是6</div>
     <div>确认密码:<input ngModel type="password" name="confirmpass"/></div>
    <div [hidden] = "!myForm.form.hasError('equal', 'passwordsGroup')">
      {{myForm.form.getError('equal', 'passwordsGroup')?.descxx}}
    </div>
  </div>
  <div><input type="submit" value="提交"/></div>
</form>
<!--
<div>{{myForm.value | json}}</div> &lt;!&ndash;获取整个表单的数据&ndash;&gt;
<div>{{username.value}}</div> &lt;!&ndash;通过这个获取用户名的值&ndash;&gt;
-->

mobileValid = true;
  mobileUntouched = true;
  onMobileInput(form: NgForm) {
    if (form) {
      this.mobileValid = form.form.get('mobile').valid;
      this.mobileUntouched = form.form.get('mobile').untouched;
    }
  }

相关文章

  • 8.模板式表单校验

    模板式表单只能将校验方法包装成指令。步骤1: 步骤2: 指令没有模板,在selector里写名字,模板引用。提供了...

  • 模板式表单校验和 表单处理实战

    模板式表单校验 在模板式表单中后台没有像响应式的数据模型,指令是唯一能使用的东西,需要将校验器方法包装成指令,然后...

  • (九)4模板式表单校验

    语法昂长,不方便逻辑控制(真正项目,不推荐使用,只适合简单的逻辑场景) 步骤,将校验器包装成一个指令1.先通过cl...

  • (九)1.表单处理

    来一段概念 在跟模快中引入FormsModule模块,可以使用模板式表单。引入ReactiveFoemsModul...

  • Angular表单处理

    第七章 表单处理 学习内容: 一.简述模板式表单与响应式表单的不同 Angular表单API 模板式表单简述: ...

  • Element-UI表单验证

    校验规则 表单通过rules属性绑定校验规则对象,表单项通过prop属性绑定具体校验规则 注意校验的字段必须和表单...

  • bootstrap直接对form表进行校验

    form表单可以前端进行校验,当然也可以直接采用bootstrap对form表单进行校验如form表单中有 等相关...

  • 13、element-ui中表单验证函数的封装

    // 表单验证 validatForm () { // 校验表单的方法 let validat t...

  • Element UI 校验form表单 升级版

    前言:业务中台系统中,有表单校验,一般我们都会配置rules属性,进行校验,如果存在多个表单校验,对用户体验很不友...

  • Spring Boot+Vue 添加修改删除数据(四)

    Element UI 表单数据校验 定义 rules 对象,在 rules 对象中设置表单各个选项的校验规则 re...

网友评论

      本文标题:8.模板式表单校验

      本文链接:https://www.haomeiwen.com/subject/zrjhfftx.html