DDR爱好者之家 Design By 杰米
一、前提
- 必要性:特别必要
- 意义:很有意义
二、正文
(一)、新建表单(模板表单)
1、新建名称为formValidator的ng项目——命令行输入ng new formValidator;
2、修改pakage.json文件——添加参数,方便开发,命令行输入npm start启动项目;
"scripts": { "ng": "ng", "start": "ng serve --open --port 4210",//修改端口号&自动打开默认浏览器窗口 "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" },
3、新建组件,命令行输入ng g c templateForm --spec false;
4、将app.components.html中的内容,替换成<app-template-form></app-template-form>
5、在app.module.ts中引入FormModul并在import中使用;
6、书写formValidator组件
//template-form.html <div class="container"> <form (ngSubmit)="save()" #myForm="ngForm"> <input type="text" [(ngModel)]="name" //双向数据绑定 name="name" //使用form时必须定义,可以理解为当前控件的名字 #myName="ngModel" //检查当前控件状态的出口,应用:myName.valid、myName.errors等 autocomplete="off" //关闭浏览器自带的显示历史记录 h5新属性 [appVerifyName]="nameList" //添加验证器 > <!--invalid是否验证成功--> <!--dirty是否改变--> <!--touched是否被抚摸过--> <div *ngIf="myName.invalid && (myName.dirty || myName.touched)"> <div *ngIf="myName.errors.required"> 名称为必填项 </div> <div *ngIf="myName.errors.repeat"> 名称重复 </div> </div> <button type="submit" [disabled]="!myForm.form.valid">提交</button> //验证通过才能提交 </form> </div>
//template-form.ts ... name: string; nameAry:string[] = ['zhangsan','lisi','wangwu']; constructor() { } ngOnInit() {} save(): void{ console.log('save 发请求') } ...
(二)、验证表单
1、新建指令,用于验证ng g c d share/verifyName
2、在share目录下新建nameValidator.ts,用于书写验证函数
//share/nameValidator.ts import { ValidatorFn, AbstractControl } from "@angular/forms"; export function nameValidator(nameList: string[]): ValidatorFn { return (control: AbstractControl): { [key: string]: any } | null => { //依据指令中传递进来的名称列表进行判断,如果包含,就返回一个对象,对象的key将 //作为模板(template-form.html)中被验证的控件的erros的key,如果不包含返回null //表示验证通过 return nameList.includes(control.value) "htmlcode">//verify-name.directive.ts import { Directive, Input } from '@angular/core'; import { Validator, NG_VALIDATORS, AbstractControl } from '@angular/forms'; import { nameValidator } from './nameValidator'; @Directive({ selector: '[appVerifyName]', providers: [{ provide: NG_VALIDATORS, useExisting: VerifyNameDirective, multi: true }] }) export class VerifyNameDirective implements Validator { //实现Validator接口 @Input('appVerifyName') //接收验证规则(reg),或者你希望传到指令中的什么 nameList: string[]; validate(control: AbstractControl): { [key: string]: any } | null { return this.name "color: #ff0000">三、碎碎念
如果只有一个表单或者项目比较小巧,用这样的验证机制,我认为是不太明智的(用ng都没必要),随便弄个计数器或者标识位就能达到dirty和touched的效果,反之,大概率上没有一个项目有一万个表单控件,定义9000个验证规则的,所以可以高度复用,而且维护起来也灵活一些
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]