国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何在 Angular 中為響應(yīng)式表單創(chuàng)建自定義驗(yàn)證器

這篇具有很好參考價(jià)值的文章主要介紹了如何在 Angular 中為響應(yīng)式表單創(chuàng)建自定義驗(yàn)證器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

簡介

Angular 的 @angular/forms 包提供了一個(gè) Validators 類,支持諸如 required、minLength、maxLengthpattern 等有用的內(nèi)置驗(yàn)證器。然而,可能存在需要更復(fù)雜或自定義規(guī)則進(jìn)行驗(yàn)證的表單字段。在這種情況下,您可以使用自定義驗(yàn)證器。

在 Angular 中使用響應(yīng)式表單時(shí),您可以使用函數(shù)定義自定義驗(yàn)證器。如果驗(yàn)證器不需要被重復(fù)使用,它可以直接存在于組件文件中作為一個(gè)函數(shù)。否則,如果驗(yàn)證器需要在其他組件中重復(fù)使用,它可以存在于一個(gè)單獨(dú)的文件中。

在本教程中,您將構(gòu)建一個(gè)帶有可重用自定義驗(yàn)證器的響應(yīng)式表單,以檢查 URL 是否符合特定條件。

先決條件

要完成本教程,您需要:

  • 在本地安裝 Node.js,您可以按照《如何安裝 Node.js 并創(chuàng)建本地開發(fā)環(huán)境》進(jìn)行操作。
  • 一些關(guān)于設(shè)置 Angular 項(xiàng)目的基本知識(shí)。

本教程已經(jīng)在 Node v15.2.1、npm v6.14.8、@angular/core v11.0.0 和 @angular/forms v11.0.0 下進(jìn)行了驗(yàn)證。

步驟 1 – 設(shè)置項(xiàng)目

為了本教程的目的,您將從使用 @angular/cli 生成的默認(rèn) Angular 項(xiàng)目開始構(gòu)建。

npx @angular/cli new angular-reactive-forms-custom-validtor-example --style=css --routing=false --skip-tests

這將配置一個(gè)新的 Angular 項(xiàng)目,其中樣式設(shè)置為 “CSS”(而不是 “Sass”、“Less” 或 “Stylus”),沒有路由,并且跳過了測試。

進(jìn)入新創(chuàng)建的項(xiàng)目目錄:

cd angular-reactive-forms-custom-validator-example

為了使用響應(yīng)式表單,您將使用 ReactiveFormsModule 而不是 FormsModule

在代碼編輯器中打開 app.module.ts 并添加 ReactiveFormsModule

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    ReactiveFormsModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

到此為止,您應(yīng)該已經(jīng)擁有一個(gè)帶有 ReactiveFormsModule 的新 Angular 項(xiàng)目。

步驟 2 – 構(gòu)建自定義驗(yàn)證器

本教程的示例自定義驗(yàn)證器將接受一個(gè) URL 字符串,并確保它以 https 協(xié)議開頭并以 .io 頂級(jí)域名結(jié)尾。

首先,在您的終端中,創(chuàng)建一個(gè) shared 目錄:

mkdir src/shared

然后,在這個(gè)新目錄中,創(chuàng)建一個(gè)新的 url.validator.ts 文件。在代碼編輯器中打開此文件并添加以下代碼:

import { AbstractControl } from '@angular/forms';

export function ValidateUrl(control: AbstractControl) {
  if (!control.value.startsWith('https') || !control.value.includes('.io')) {
    return { invalidUrl: true };
  }
  return null;
}

這段代碼使用了 AbstractControl 類,它是 FormControl、FormGroupFormArray 的基類。這允許訪問 FormControl 的值。

這段代碼將檢查值是否以 https 字符串開頭。它還將檢查值是否包含 .io 字符串。

如果驗(yàn)證失敗,它將返回一個(gè)帶有錯(cuò)誤名稱 invalidUrl 和值 true 的對象。

否則,如果驗(yàn)證通過,它將返回 null。

到此為止,您的自定義驗(yàn)證器已經(jīng)準(zhǔn)備就緒。

步驟 3 – 使用自定義驗(yàn)證器

接下來,創(chuàng)建一個(gè)表單,其中包含 userNamewebsiteUrl

打開 app.component.ts 并用以下代碼替換內(nèi)容:

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';

import { ValidateUrl } from '../shared/url.validator';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  myForm: FormGroup;

  constructor(private fb: FormBuilder) {}

  ngOnInit() {
    this.myForm = this.fb.group({
      userName: ['', Validators.required],
      websiteUrl: ['', [Validators.required, ValidateUrl]]
    });
  }

  saveForm(form: FormGroup) {
    console.log('Valid?', form.valid); // true or false
    console.log('Username', form.value.userName);
    console.log('Website URL', form.value.websiteUrl);
  }
}

在這段代碼中,websiteUrl 表單控件同時(shí)使用了內(nèi)置的 Validators.required 和自定義的 ValidateUrl 驗(yàn)證器。

第四步 – 訪問模板中的錯(cuò)誤信息

與您的表單交互的用戶需要了解哪些數(shù)值未通過驗(yàn)證。在組件模板中,您可以使用自定義驗(yàn)證器返回值中定義的鍵。

打開 app.component.html 并用以下代碼替換內(nèi)容:

<form [formGroup]="myForm" (ngSubmit)="saveForm(myForm)">
  <div>
    <label>
      用戶名:
      <input formControlName="userName" placeholder="您的用戶名">
    </label>
    <div *ngIf="(
                 myForm.get('userName').dirty ||
                 myForm.get('userName').touched
                ) &&
                myForm.get('userName').invalid"
    >
      請?zhí)峁┠挠脩裘?    </div>
  </div>
  <div>
    <label>
      網(wǎng)站 URL:
      <input formControlName="websiteUrl" placeholder="您的網(wǎng)站">
    </label>
    <div
      *ngIf="(
              myForm.get('websiteUrl').dirty ||
              myForm.get('websiteUrl').touched
             ) &&
             myForm.get('websiteUrl').invalid"
      >
      僅接受通過 HTTPS 提供且來自 .io 頂級(jí)域的 URL。
    </div>
  </div>
</form>

此時(shí),您可以編譯您的應(yīng)用程序:

npm start

然后在您的網(wǎng)絡(luò)瀏覽器中打開它。您可以與 userNamewebsiteUrl 字段進(jìn)行交互。確保您的 ValidateUrl 的自定義驗(yàn)證器對于應(yīng)滿足 https.io 條件的值(例如 https://example.io)能夠正常工作。

結(jié)論

在本文中,您為 Angular 應(yīng)用程序中的響應(yīng)式表單創(chuàng)建了一個(gè)可重用的自定義驗(yàn)證器。

要了解模板驅(qū)動(dòng)表單和響應(yīng)式表單中自定義驗(yàn)證器的示例,請參閱 Angular 中的自定義表單驗(yàn)證。

如果您想了解更多關(guān)于 Angular 的知識(shí),請查看我們的 Angular 主題頁面,了解練習(xí)和編程項(xiàng)目。文章來源地址http://www.zghlxwxcb.cn/news/detail-835383.html

到了這里,關(guān)于如何在 Angular 中為響應(yīng)式表單創(chuàng)建自定義驗(yàn)證器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何在自定義 Angular 指令中使用 @HostBinding 和 @HostListener

    簡介 @HostBinding 和 @HostListener 是 Angular 中兩個(gè)在自定義指令中非常有用的裝飾器。 @HostBinding 允許你在承載指令的元素或組件上設(shè)置屬性,而 @HostListener 則允許你監(jiān)聽宿主元素或組件上的事件。 在本文中,你將會(huì)在一個(gè)示例指令中使用 @HostBinding 和 @HostListener 來監(jiān)聽宿主上的

    2024年02月22日
    瀏覽(22)
  • Angular表單

    案例來源于Angular官網(wǎng)(略作拓展) 通過指令 [formControl] 實(shí)現(xiàn),直接訪問 FormControl 實(shí)例 通過指令內(nèi)部的值訪問器 ControlValueAccessor ,將 FormControl 實(shí)例和視圖中的表單元素聯(lián)系起來。 通過 NgModel 指令為表單元素創(chuàng)建并管理 FormControl 實(shí)例,間接訪問 FormControl 實(shí)例 響應(yīng)式 模板驅(qū)

    2024年04月09日
    瀏覽(11)
  • angular表單的一些概念和方法

    UntypedFormGroup UntypedFormGroup 是一個(gè)類型安全的 FormGroup,它是一個(gè)表單控件容器,用于組織和管理一組表單控件 markAsPristine() ?方法用于將 FormGroup 標(biāo)記為 “pristine”(未修改)狀態(tài)。這意味著表單控件的值沒有被修改過。通常在表單提交后或者在重置表單時(shí)使用該方法來重置表

    2024年02月15日
    瀏覽(33)
  • 在uniapp中為自定義組件綁定點(diǎn)擊事件點(diǎn)擊后沒有效果

    在uniapp中為自定義組件綁定點(diǎn)擊事件點(diǎn)擊后沒有效果

    使用uniapp時(shí),封裝了一個(gè)Card的組件,為這個(gè)Card組件加上點(diǎn)擊事件 @click=\\\"handleClick\\\"事件時(shí),事件沒有觸發(fā)。 點(diǎn)開微信小程序生成后的源碼,可以看到 @click的事件 變成bindClick 了。正確的點(diǎn)擊事件應(yīng)該是 bindtap ,如下圖中view上面綁定事件。 這個(gè)時(shí)候可以修改組件上面的寫法,

    2024年02月07日
    瀏覽(17)
  • 如何創(chuàng)建和填寫 PDF 表單,簡化您的文檔工作流

    如何創(chuàng)建和填寫 PDF 表單,簡化您的文檔工作流

    閱讀本文,了解如何在開源辦公套件 ONLYOFFICE 中創(chuàng)建和填寫 PDF 表單。 ONLYOFFICE? 表單 首個(gè)版本 發(fā)布于 2022 年 1 月 18 日,是 ? ONLYOFFICE 版本 7.0 ? 更新的一部分 。 您可以使用 ONLYOFFICE ? 表單,創(chuàng)建 各種類型的 模板 文檔 ,包括 法律協(xié)議、合同、報(bào)告、錄取 表單 、 調(diào)查問卷

    2024年02月22日
    瀏覽(17)
  • 界面控件DevExpress ASP.NET中文 - 如何自定義編輯表單運(yùn)行時(shí)布局?

    界面控件DevExpress ASP.NET中文 - 如何自定義編輯表單運(yùn)行時(shí)布局?

    在DevExpress ASP.NET控件v19.2版本中就針對ASP. NET WebForms和MVC平臺(tái)的ASP. NET GridView和CardView控件添加了一個(gè)主要增強(qiáng)功能。 DevExpress ASP.NET v23.1正式版下載 (Q技術(shù)交流:523159565) 當(dāng)您使用預(yù)定義的或?自定義的編輯表單時(shí),經(jīng)常需要?jiǎng)討B(tài)地更改布局。例如,您可能需要根據(jù)用戶操作、

    2024年02月11日
    瀏覽(19)
  • 如何在fastadmin的html模板中,循環(huán)一段自定義表單模板代碼?

    在FastAdmin的HTML模板中,可以使用模板引擎語法和JavaScript代碼來實(shí)現(xiàn)自定義表單模板代碼的循環(huán)。具體步驟如下: 在HTML模板中,定義一個(gè)占位符,用來顯示循環(huán)后的自定義表單模板代碼。例如: 在JavaScript代碼中,獲取自定義表單模板代碼,并循環(huán)生成表單。具體代碼如下所

    2024年02月02日
    瀏覽(19)
  • Angular中RxJS處理一些任務(wù)——HTTP請求,表單處理

    ? ? ? ? 此篇是完善https://blog.csdn.net/qq_44327851/article/details/134917018這篇博客,在上篇博客中我們提到了處理異步數(shù)據(jù)流,那在Angular中有哪些異步數(shù)據(jù)流呢,又是如何處理的呢? ????????Angular中的RxJS是一個(gè)非常強(qiáng)大和流行的庫, 用于處理異步數(shù)據(jù)流和事件流 。它提供了豐

    2024年02月03日
    瀏覽(21)
  • angular中多層嵌套結(jié)構(gòu)的表單如何處理回顯問題

    angular中多層嵌套結(jié)構(gòu)的表單如何處理回顯問題

    最近在處理angular表單時(shí),有一個(gè)4層結(jié)構(gòu)的表單。而且很多元素時(shí)動(dòng)態(tài)生成,如下: 其界面表現(xiàn)如下: 、 而在編輯的狀態(tài)時(shí)如何根據(jù)后端返回?cái)?shù)據(jù)結(jié)構(gòu)進(jìn)行回顯。angular中formbuilder對象提供了setValue和patchValue兩個(gè)方法。這兩個(gè)方法只對一層對象有效,對于多層嵌套的數(shù)據(jù)結(jié)構(gòu)

    2024年02月09日
    瀏覽(18)
  • Angualr響應(yīng)式表單

    Angualr響應(yīng)式表單

    由于最近公司框架升級(jí),拋棄了原來手動(dòng)檢驗(yàn)表單的方式,將所有的表單改為響應(yīng)式,由于之前沒用過,在一開始我以為只有我沒有用過,了解了小組里的其他同事得知基本都不是很熟悉 后面時(shí)間比較緊,沒辦法只能邊做邊學(xué)邊改了,所以難免踩了一些坑,當(dāng)然也花了一些時(shí)

    2024年01月20日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包