国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

Angular實(shí)現(xiàn)表單驗(yàn)證功能

2019-11-19 14:56:39
字體:
供稿:網(wǎng)友

Angular表單驗(yàn)證分為兩種驗(yàn)證:1.內(nèi)置驗(yàn)證(required,minlength等);2.自定義驗(yàn)證(正則表達(dá)式)。

接下來我們用一個(gè)注冊(cè)賬號(hào)的demo來看一下這兩種驗(yàn)證是如何實(shí)現(xiàn)的。

項(xiàng)目界面

一、內(nèi)置驗(yàn)證

其中賬戶名有required驗(yàn)證和最短長(zhǎng)度驗(yàn)證,其他兩個(gè)只有required驗(yàn)證

1.項(xiàng)目目錄

----------app.component.ts

----------app.component.html

----------app.component.css

----------app.module.ts

2.項(xiàng)目代碼

app.module.ts

import { BrowserModule } from '@angular/platform-browser';import { NgModule } from '@angular/core';import { FormsModule,ReactiveFormsModule }  from '@angular/forms';//表單驗(yàn)證必須導(dǎo)入這兩個(gè)模塊import { AppComponent } from './app.component';@NgModule({ declarations: [  AppComponent ], imports: [  BrowserModule,  FormsModule,  //注冊(cè)模塊  ReactiveFormsModule ], providers: [], bootstrap: [AppComponent]})export class AppModule { } 

app.component.ts

import { Component,OnInit } from '@angular/core';import { FormGroup, FormControl, Validators } from '@angular/forms';@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css']})export class AppComponent { title = 'app'; Form:FormGroup; data={   name:"",   email:"",   tel:"" } ngOnInit(): void {   this.Form = new FormGroup({      'name': new FormControl(this.data.name, [       Validators.required,       Validators.minLength(4)      ]),      'email': new FormControl(this.data.email, Validators.required),      'tel': new FormControl(this.data.tel, Validators.required)     });  }  get name() { return this.Form.get('name'); }  get email() { return this.Form.get('email'); }  get tel() { return this.Form.get('tel'); }}

簡(jiǎn)單來說,在使用驗(yàn)證表單的時(shí)候,大致分為四步:

(1)導(dǎo)入相關(guān)模塊FormGroup, FormControl, Validators;

(2)聲明表單驗(yàn)證變量From:FromGroup;

(3)定義驗(yàn)證規(guī)則;

(4)通過它所屬的控件組(FormGroup)的get方法來訪問表單控件

app.component.html

<div class="wrapper">  <div class="row">    <p class="title-wrapper">注冊(cè)賬號(hào)</p>  </div>  <div class="row">    <div class="contain-wrapper" [formGroup]="Form">      <label for="name">賬戶名:</label>      <input type="text" id="name" formControlName="name"><br/>      <div *ngIf="name.invalid && (name.dirty || name.touched)" class="alert alert-danger">        <div *ngIf="name.errors.required">          請(qǐng)輸入長(zhǎng)度賬戶名!        </div>        <div *ngIf="name.errors.minlength">          賬戶名長(zhǎng)度不小于4!        </div>      </div>      <label for="email">郵箱:</label>      <input type="text" id="email" formControlName="email"><br/>      <div *ngIf="email.invalid && (email.dirty || email.touched)" class="alert alert-danger">        <div *ngIf="email.errors.required">          請(qǐng)輸入郵箱!        </div>      </div>      <label for="tel">電話:</label>      <input type="text" id="tel" formControlName="tel">      <div *ngIf="tel.invalid && (tel.dirty || tel.touched)" class="alert alert-danger">        <div *ngIf="tel.errors.required">          請(qǐng)輸入電話!        </div>      </div>    </div>  </div>  <div class="row">    <button class="btn btn-primary confirm">確認(rèn)</button>  </div></div>

app.component.css

*{  font-size: 18px;}.wrapper{  margin: 0 auto;  margin-top:10%;  width:30%;  height: 20%;  border:1px solid black;  border-radius: 10px;}.title-wrapper{  margin: 0 auto;  padding-top: 20px;   padding-bottom: 20px;  width:370px;  text-align: center;  font-size: 20px;  font-weight: 800;}label{  display: inline-block;  width:72px;}.contain-wrapper{  width: 300px;  margin:0 auto;}.confirm{  margin-top:20px;  width:100%;}

3.項(xiàng)目效果

二、自定義驗(yàn)證

自定義表單驗(yàn)證,需要?jiǎng)?chuàng)建自定義驗(yàn)證器,我們接下來更改郵箱的驗(yàn)證,將其改為有格式的驗(yàn)證,而不是單純的存在驗(yàn)證,首先我們來看一下項(xiàng)目目錄的更改

1.項(xiàng)目目錄

----------app.component.ts

----------app.component.html

----------app.component.css

----------app.module.ts

----------emailAuthentication.ts

2.項(xiàng)目代碼

app.module.ts

注冊(cè)自定義驗(yàn)證器EmailValidatorDirective

import { BrowserModule } from '@angular/platform-browser';import { NgModule } from '@angular/core';import { FormsModule,ReactiveFormsModule }  from '@angular/forms';import { EmailValidatorDirective } from './emailAuthentication';import { AppComponent } from './app.component';@NgModule({ declarations: [  AppComponent,  EmailValidatorDirective ], imports: [  BrowserModule,  FormsModule,  ReactiveFormsModule ], providers: [], bootstrap: [AppComponent]})export class AppModule { }

emailAuthentication.ts

import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';import { AbstractControl, NG_VALIDATORS, Validator, ValidatorFn, Validators } from '@angular/forms';/** A hero's name can't match the given regular expression */export function emailValidator(nameRe: RegExp): ValidatorFn {  return (control: AbstractControl): { [key: string]: any } => {    const forbidden = !nameRe.test(control.value);    return forbidden ? { 'forbiddenName': { value: control.value } } : null;  };}@Directive({  selector: '[appForbiddenName]',  providers: [{ provide: NG_VALIDATORS, useExisting: EmailValidatorDirective, multi: true }]})export class EmailValidatorDirective implements Validator {  @Input() forbiddenName: string;  validate(control: AbstractControl): { [key: string]: any } {    return this.forbiddenName ? emailValidator(new RegExp(this.forbiddenName, 'i'))(control)      : null;  }}

app.component.ts

import { Component,OnInit } from '@angular/core';import { FormGroup, FormControl, Validators } from '@angular/forms';import { emailValidator } from './emailAuthentication'; //導(dǎo)入emailValidator自定義驗(yàn)證器@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css']})export class AppComponent { title = 'app'; //email的正則表達(dá)式 emailExp = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/ ; Form:FormGroup; data={   name:"",   email:"",   tel:"" } ngOnInit(): void {   this.Form = new FormGroup({      'name': new FormControl(this.data.name, [       Validators.required,       Validators.minLength(4)      ]),      'email': new FormControl(this.data.email, [        Validators.required,        emailValidator(this.emailExp) //自定義驗(yàn)證器        ]),      'tel': new FormControl(this.data.tel, Validators.required)     });  }  get name() { return this.Form.get('name'); }  get email() { return this.Form.get('email'); }  get tel() { return this.Form.get('tel'); }}

app.component.html

<div class="wrapper">  <div class="row">    <p class="title-wrapper">注冊(cè)賬號(hào)</p>  </div>  <div class="row">    <div class="contain-wrapper" [formGroup]="Form">      <label for="name">賬戶名:</label>      <input type="text" id="name" formControlName="name"><br/>      <div *ngIf="name.invalid && (name.dirty || name.touched)" class="alert alert-danger">        <div *ngIf="name.errors.required">          請(qǐng)輸入賬戶名!        </div>        <div *ngIf="name.errors.minlength">          賬戶名長(zhǎng)度不小于4!        </div>      </div>      <label for="email">郵箱:</label>      <input type="text" id="email" formControlName="email" required><br/>      <div *ngIf="email.invalid && (email.dirty || email.touched)" class="alert alert-danger">        <div *ngIf="email.errors.forbiddenName">         請(qǐng)輸入正確格式的郵箱!        </div>      </div>      <label for="tel">電話:</label>      <input type="text" id="tel" formControlName="tel">      <div *ngIf="tel.invalid && (tel.dirty || tel.touched)" class="alert alert-danger">        <div *ngIf="tel.errors.required">          請(qǐng)輸入電話!        </div>      </div>    </div>  </div>  <div class="row">    <button class="btn btn-primary confirm" [disabled]="Form.invalid" >確認(rèn)</button>  </div></div>

在最后確認(rèn)的時(shí)候,我們?cè)O(shè)置一下按鈕的disabled屬性,在表單驗(yàn)證不通過的時(shí)候,確認(rèn)按鈕是點(diǎn)擊不了的,顯示不可點(diǎn)擊狀態(tài)。[disabled]="Form.invalid"。

3.項(xiàng)目效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 旬阳县| 石景山区| 商丘市| 汝州市| 醴陵市| 万荣县| 五原县| 正定县| 平顶山市| 伊金霍洛旗| 云南省| 丰都县| 南阳市| 常德市| 大厂| 澄迈县| 泉州市| 宝应县| 车致| 金华市| 萨迦县| 乌拉特中旗| 平陆县| 宁河县| 榆社县| 格尔木市| 仙游县| 秦安县| 静宁县| 沙洋县| 东明县| 宜昌市| 万荣县| 河曲县| 蓝山县| 思南县| 思南县| 安乡县| 敦化市| 商水县| 深州市|