小編給大家分享一下Angular8如何實(shí)現(xiàn)表單及其驗(yàn)證,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
正文
(一)、新建表單(模板表單)
1、新建名稱為formValidator的ng項(xiàng)目——命令行輸入ng new formValidator;
2、修改pakage.json文件——添加參數(shù),方便開發(fā),命令行輸入npm start啟動(dòng)項(xiàng)目;
"scripts": { "ng": "ng", "start": "ng serve --open --port 4210",//修改端口號(hào)&自動(dòng)打開默認(rèn)瀏覽器窗口 "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" },
3、新建組件,命令行輸入ng g c templateForm --spec false;
4、將app.components.html中的內(nèi)容,替換成<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" //雙向數(shù)據(jù)綁定 name="name" //使用form時(shí)必須定義,可以理解為當(dāng)前控件的名字 #myName="ngModel" //檢查當(dāng)前控件狀態(tài)的出口,應(yīng)用:myName.valid、myName.errors等 autocomplete="off" //關(guān)閉瀏覽器自帶的顯示歷史記錄 h6新屬性 [appVerifyName]="nameList" //添加驗(yàn)證器 > <!--invalid是否驗(yàn)證成功--> <!--dirty是否改變--> <!--touched是否被撫摸過--> <div *ngIf="myName.invalid && (myName.dirty || myName.touched)"> <div *ngIf="myName.errors.required"> 名稱為必填項(xiàng) </div> <div *ngIf="myName.errors.repeat"> 名稱重復(fù) </div> </div> <button type="submit" [disabled]="!myForm.form.valid">提交</button> //驗(yàn)證通過才能提交 </form> </div>
//template-form.ts ... name: string; nameAry:string[] = ['zhangsan','lisi','wangwu']; constructor() { } ngOnInit() {} save(): void{ console.log('save 發(fā)請(qǐng)求') } ...
(二)、驗(yàn)證表單
1、新建指令,用于驗(yàn)證ng g c d share/verifyName
2、在share目錄下新建nameValidator.ts,用于書寫驗(yàn)證函數(shù)
//share/nameValidator.ts import { ValidatorFn, AbstractControl } from "@angular/forms"; export function nameValidator(nameList: string[]): ValidatorFn { return (control: AbstractControl): { [key: string]: any } | null => { //依據(jù)指令中傳遞進(jìn)來的名稱列表進(jìn)行判斷,如果包含,就返回一個(gè)對(duì)象,對(duì)象的key將 //作為模板(template-form.html)中被驗(yàn)證的控件的erros的key,如果不包含返回null //表示驗(yàn)證通過 return nameList.includes(control.value) ? { 'repeat': { value: control.value } } : null; }; }
3、書寫指令——驗(yàn)證名稱不能重復(fù)
//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 { //實(shí)現(xiàn)Validator接口 @Input('appVerifyName') //接收驗(yàn)證規(guī)則(reg),或者你希望傳到指令中的什么 nameList: string[]; validate(control: AbstractControl): { [key: string]: any } | null { return this.name ? nameValidator(nameList)(control) : null } }
以上是“Angular8如何實(shí)現(xiàn)表單及其驗(yàn)證”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站名稱:Angular8如何實(shí)現(xiàn)表單及其驗(yàn)證-創(chuàng)新互聯(lián)
URL地址:http://www.rwnh.cn/article48/csjoep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容