您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

angular2之ng2-validation学习

2024/2/19 6:52:16发布26次查看
最近在使用ng2做前端。发现表单验证这块除了官网上给的示例,验证required。其他的都要自己写逻辑来实现。开发起来不是很方便。所以在网上找了下ng2表单验证的资源,觉得ng2-validation不错。所以做的例子。以便以后使用,也怕时间久了忘脑后去。
示例代码链接
首先从npm包管理服务器上下载安装。
npm install ng2-validation --save 命令参数--save:使npm包信息保存在package.json文件的dependencies配置集合内。该集合是ng2正式运行的依赖集合。
使用方法
在模块文件内添加引用,一般为appmodule。
app.module.ts文件
import { ngmodule } from '@angular/core';import { browsermodule } from '@angular/platform-browser';import { formsmodule,reactiveformsmodule }   from '@angular/forms';import { customformsmodule } from 'ng2-validation';import { appcomponent } from './app.component';import { appttemplatedrivencomponent } from './app-ttemplate-driven/app-ttemplate-driven.component';import { appmodeldrivencomponent } from './app-model-driven/app-model-driven.component';import { approutingmodule } from app/app-routes.module;import { validationconfigmodel } from app/models/validation; @ngmodule({   declarations: [     appcomponent,     appttemplatedrivencomponent,     appmodeldrivencomponent   ],   imports: [     browsermodule,     formsmodule,     approutingmodule,     customformsmodule,     reactiveformsmodule   ],   providers: [validationconfigmodel],   bootstrap: [appcomponent] }) export class appmodule { }
view code
表单验证的使用方式有两种。可以灵活选择。两者混合使用我没研究。其实使用一种就足够了。
模板驱动(template driven)
github上例子
<input type="text" [(ngmodel)]="model.field" name="field" #field="ngmodel" [rangelength]="[5, 9]"/> <p *ngif="field.errors?.rangelength">error message</p>
模型驱动(model driven)
github上例子
<
<p *ngif="demoform.from.controls.field.errors?.rangelength">error message</p>
formgroup需要在from的dom上添加formgroup驱动,否则验证不生效。

<form [formgroup]="formgroup" (ngsubmit)="onsubmit()" #validationform2="ngform" >
 下面是我的demo代码片段:
模板驱动app-ttemplate-driven.component.html

<div class="container">   <form (ngsubmit)="onsubmit()" #validationform="ngform">     <div class="form-group">       <label for="appfield">长度要求</label>       <input type="text" required class="form-control" name="appfield" [(ngmodel)]="model.appfield" #rangelength="ngmodel" [rangelength]="[5, 9]">       <p [hidden]="rangelength.valid||rangelength.pristine">长度在5到9之间</p>     </div>     <div class="form-group">       <label for="appfield2">长度要求2</label>       <input type="text" class="form-control" name="appfield2" [(ngmodel)]="model.appfield2" #rangelength2="ngmodel" [rangelength]="[0,5]">       <p [hidden]="rangelength2.valid||rangelength2.pristine">长度要求</p>     </div>     <div class="form-group">       <label for="appmin">最小值</label>       <input type="number" class="form-control" name="appmin" [(ngmodel)]="model.appmin" #appmin="ngmodel" [min]="10" />      <p [hidden]="appmin.valid||appmin.pristine">取值大于等于10</p>     </div>    <div class="form-group">      <label for="appgt">大于</label>      <input type="number" class="form-control" name="appgt" [(ngmodel)]="model.appgt" #appgt="ngmodel" [gt]="10" />      <p [hidden]="appgt.valid||appgt.pristine">取值大于10</p>    </div>    <div class="form-group">      <label for="appgte">大于等于</label>      <input type="number" class="form-control" name="appgte" [(ngmodel)]="model.appgte" #appgte="ngmodel" [gte]="10" />      <p [hidden]="appgte.valid||appgte.pristine">取值大于等于10</p>    </div>    <div class="form-group">      <label for="appmax">最大值</label>      <input type="number" class="form-control" name="appmax" [(ngmodel)]="model.appmax" #appmax="ngmodel" [max]="10" />      <p [hidden]="appmax.valid||appmax.pristine">最小值10</p>    </div>     <div class="form-group">      <label for="applt">小于</label>      <input type="number" class="form-control" name="applt" [(ngmodel)]="model.applt" #applt="ngmodel" [lt]="10" />      <p [hidden]="applt.valid||applt.pristine">值小于10</p>    </div>    <div class="form-group">      <label for="applte">小于等于</label>      <input type="number" class="form-control" name="applte" [(ngmodel)]="model.applte" #applte="ngmodel" [lte]="10" />      <p [hidden]="applte.valid||applte.pristine">值小于等于10</p>    </div>    <div class="form-group">      <label for="apprange">取值范围</label>      <input type="number" class="form-control" name="apprange" [(ngmodel)]="model.apprange" #apprange="ngmodel" [range]="[10, 20]" />      <p [hidden]="apprange.valid||apprange.pristine">取值大于等于10到小于等于20</p>    </div>    <div class="form-group">      <label for="appdigits">数字</label>      <input type="text" class="form-control" name="appdigits" [(ngmodel)]="model.appdigits" #appdigits="ngmodel" digits />      <p [hidden]="appdigits.valid||appdigits.pristine">必须是uint</p>    </div>    <div class="form-group">      <label for="appnumber">数字</label>      <input type="text" class="form-control" name="appnumber" [(ngmodel)]="model.appnumber" #appnumber="ngmodel" number />      <p [hidden]="appnumber.valid||appnumber.pristine">任何数字</p>    </div>    <div class="form-group">      <label for="appurl">链接</label>      <input type="text" class="form-control" name="appurl" [(ngmodel)]="model.appurl" #appurl="ngmodel" url />      <p [hidden]="appurl.valid||appurl.pristine">合法的url</p>    </div>     <div class="form-group">      <label for="appemail">邮箱</label>      <input type="text" class="form-control" name="appemail" [(ngmodel)]="model.appemail" #appemail="ngmodel" email />      <p [hidden]="appemail.valid||appemail.pristine">合法的邮箱地址</p>    </div>    <div class="form-group">      <label for="appdate">日期</label>      <input type="text" class="form-control" name="appdate" [(ngmodel)]="model.appdate" #appdate="ngmodel" date />      <p [hidden]="appdate.valid||appdate.pristine">合法的日期</p>    </div>    <div class="form-group">      <label for="appuuid">uuid</label>      <input type="text" class="form-control" name="appuuid" [(ngmodel)]="model.appuuid" #appuuid="ngmodel" uuid="'all'" />      <p [hidden]="appuuid.valid||appuuid.pristine">不是合法的uuid</p>    </div>    <div class="form-group">      <label for="appphone">电话</label>      <input type="text" class="form-control" name="appphone" [(ngmodel)]="model.appphone" #appphone="ngmodel" phone="cn" />      <p [hidden]="appphone.valid||appphone.pristine">不是合法的电话号码</p>    </div>    <div class="form-group">      <label >两次相同</label>      <input class="form-control" type="password" ngmodel name="apppassword" #apppassword="ngmodel" required/>      <p [hidden]="apppassword.valid||apppassword.pristine">必填项</p>      <input class="form-control" type="password" ngmodel name="appcertainpassword" #appcertainpassword="ngmodel" [equalto]="apppassword"/>      <p [hidden]="appcertainpassword.valid||appcertainpassword.pristine">两次输入不一致</p>    </div>    <div class="form-group">      <label for="appequal">相同</label>      <input type="text" class="form-control" name="appequal" [(ngmodel)]="model.appequal" #appequal="ngmodel" [equal]="'哈哈'" />      <p [hidden]="appequal.valid||appequal.pristine">与值不相符</p>    </div>     <div class="form-group">      <label for="appcomplex">复合条件</label>      <input type="number" class="form-control" name="appcomplex" [(ngmodel)]="model.appcomplex" #appcomplex="ngmodel" [gte]="5" [max]="10" />      <p [hidden]="appcomplex.valid||appcomplex.pristine">大于等于5,最大是10</p>    </div>     <button type="submit" [disabled]="!validationform.form.valid" class="btn btn-default">submit</button>   </form> </div>
view code



ts文件不需要做什么,所以就不贴了。
模型驱动
app-model-driven.component.ts
import { component, oninit } from '@angular/core';import { formgroup, formcontrol, validators } from @angular/forms;import { customvalidators } from 'ng2-validation'; @component({   selector: 'app-app-model-driven',   templateurl: './app-model-driven.component.html',   styleurls: ['./app-model-driven.component.css'] }) export class appmodeldrivencomponent implements oninit {public formgroup: formgroup; password:string=;   constructor() {      let password = new formcontrol('', [validators.required]);   let certainpassword = new formcontrol('', customvalidators.equalto(password));this.formgroup = new formgroup({             field: new formcontrol('',  customvalidators.rangelength([5, 9])),             appgt:new formcontrol('', customvalidators.gt(10)),             password:password,             certainpassword:certainpassword,             maxfield:new formcontrol('',[customvalidators.gt(10),customvalidators.max(20)])         });   }   ngoninit() {   } onsubmit(){} }
view code
app-model-driven.component.html
<div class="container">   <form [formgroup]="formgroup" (ngsubmit)="onsubmit()" #validationform2="ngform" >     <div class="form-group" >       <input class="form-control" name="field" type="text" formcontrolname="field"/>       <p *ngif="validationform2.form.controls.field.errors?.rangelength">长度在5到9之间</p>       <p>{{validationform2.form.controls.field.errors?.rangelength}}</p>     </div>    <div class="form-group" >       <input class="form-control" name="appgt" type="number" formcontrolname="appgt"/>       <p *ngif="validationform2.form.controls.appgt.errors?.gt">大于10</p>     </div>     <div class="form-group" >       <input class="form-control" name="password" type="password" [(ngmodel)]="password" formcontrolname="password"/>       <p *ngif="validationform2.form.controls.password.errors?.required">必填</p>       <p>{{test.pristine}}</p>       <input class="form-control" type="password" formcontrolname="certainpassword"/>       <p *ngif="validationform2.form.controls.certainpassword.errors?.equalto">两次相同</p>     </div>     <div class="form-group" >       <label for="appmin">组合形式</label>       <input type="number" class="form-control" name="appmin" formcontrolname="maxfield" />      <p [hidden]="!validationform2.form.controls.maxfield.errors?.max &&!validationform2.form.controls.maxfield.errors?.gt">取值大于等于10且小于20</p>     </div>     <button type="submit" [disabled]="!validationform2.form.valid" class="btn btn-default">submit</button>   </form> </div>
view code






以上就是angular2之ng2-validation学习的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product