這篇文章主要介紹了關於Angular中響應式表單的介紹,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
響應式表單是在元件類別中編寫邏輯,驗證規則,這與在範本中完成控制的範本驅動表單不同。響應式表單反應形式是靈活的,可用於處理任何複雜的形式場景。我們編寫更多的元件程式碼和更少的HTML程式碼,讓單元測試更容易。
Form base and interface
Form base
接下來我們要實作的功能如下:
綁定name、 email、confirm 輸入框的值
為所有輸入框新增表單驗證功能
顯示驗證異常訊息
- ##表單驗證失敗時,不允許進行表單提交
- 表單提交功能
// signup.interface.ts
export interface User {
name: string;
account: {
email: string;
confirm: string;
}
}
ngModule and reactive forms在我們繼續深入介紹reactive forms 表單前,我們必須在@NgModule 中導入@angular/forms 庫中的ReactiveFormsModule:
import { ReactiveFormsModule } from '@angular/forms'; @NgModule({ imports: [ ..., ReactiveFormsModule ], declarations: [...], bootstrap: [...] }) export class AppModule {}友情提示:若使用reactive forms,則匯入ReactiveFormsModule;若使用template-driven 表單,則匯入FormsModule。 Reactive approach我們將基於上面的定義的基礎表單,建立SignupFormComponent :signup-form.component.ts
import { Component } from '@angular/core'; @Component({ selector: 'signup-form', template: `` }) export class SignupFormComponent { constructor() {} }這是一個基礎的元件,在我們實現上述功能之前,我們需要先介紹FormControl、FormGroup、FormBuilder 的概念和使用。 FormControl and FormGroup我們先來介紹一下FormControl 和FormGroup 的概念:FormControl - 它是一個為單一表單控制項提供支援的類,可用於追蹤控制項的值和驗證狀態,此外還提供了一系列公共API。 使用範例:
ngOnInit() { this.myControl = new FormControl(''); }FormGroup - 包含是一組 FormControl 實例,可用於追蹤 FormControl 群組的值和驗證狀態,此外也提供了一系列公開API。 使用範例:
ngOnInit() { this.myGroup = new FormGroup({ name: new FormControl(''), location: new FormControl('') }); }現在我們已經建立了FormControl 和FormGroup 實例,接下來我們來看如何使用: 上面範例中,我們必須使用[ formGroup] 綁定我們建立的myGroup 對象,除此之外還要使用formControlName 指令,綁定我們建立的FormControl 控制項。此時的表單結構如下:
FormGroup -> 'myGroup' FormControl -> 'name' FormControl -> 'location'Implementing our FormGroup modelsignup.interface.ts
export interface User { name: string; account: { email: string; confirm: string; } }與之對應的表單結構如下:
FormGroup -> 'user' FormControl -> 'name' FormGroup -> 'account' FormControl -> 'email' FormControl -> 'confirm'是的,我們可以建立嵌套的FormGroup 集合!讓我們更新一下元件 (不包含初始數據):
import { Component, OnInit } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; @Component({...}) export class SignupFormComponent implements OnInit { user: FormGroup; ngOnInit() { this.user = new FormGroup({ name: new FormControl(''), account: new FormGroup({ email: new FormControl(''), confirm: new FormControl('') }) }); } }如果我們想要設定初始數據,我們可以按照上述範例進行設定。通常情況下,我們會透過服務端提供的 API 介面來取得表單的初始資訊。 Binding our FormGroup model現在我們已經實例化了 FormGroup 模型,是時候綁定到對應的 DOM 元素上了。具體範例如下: 現在FormGroup 與FormControl 物件與DOM 結構的關聯資訊如下:
// JavaScript APIs FormGroup -> 'user' FormControl -> 'name' FormGroup -> 'account' FormControl -> 'email' FormControl -> 'confirm' // DOM bindings formGroup -> 'user' formControlName -> 'name' formGroupName -> 'account' formControlName -> 'email' formControlName -> 'confirm'Reactive submit跟範本驅動的表單一樣,我們可以透過ngSubmit輸出屬性,處理表單的提交邏輯: Reactive error validation接下來我們來為表單新增驗證規則,首先我們需要從@angular/forms 匯入Validators。具體使用範例如下:
ngOnInit() { this.user = new FormGroup({ name: new FormControl('', [Validators.required, Validators.minLength(2)]), account: new FormGroup({ email: new FormControl('', Validators.required), confirm: new FormControl('', Validators.required) }) }); }透過上述範例,我們可以看出,如果表單控制包含多種驗證規則,可以使用陣列宣告多種驗證規則。若只包含一種驗證規則,直接聲明就好。透過這種方式,我們就不需要在範本的輸入控制項中加入 required 屬性。接下來我們來新增表單驗證失敗時,不允許進行表單提交功能: 那麼問題來了,我們要如何取得表單控制項的驗證資訊?我們可以使用範本驅動表單中介紹的方式,具體如下: 此外我們也可以使用FormGroup 物件提供的API,來取得表單控制項驗證的錯誤訊息: 現在我們來看看完整的程式碼:
import { Component, OnInit } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { User } from './signup.interface'; @Component({ selector: 'signup-form', template: `` }) export class SignupFormComponent implements OnInit { user: FormGroup; constructor() {} ngOnInit() { this.user = new FormGroup({ name: new FormControl('', [Validators.required, Validators.minLength(2)]), account: new FormGroup({ email: new FormControl('', Validators.required), confirm: new FormControl('', Validators.required) }) }); } onSubmit({ value, valid }: { value: User, valid: boolean }) { console.log(value, valid); } }功能是實作了,但創建FormGroup 物件的方式有點繁瑣,Angular 團隊也意識到這點,因此為我們提供FormBuilder ,來簡化上面的操作。 Simplifying with FormBuilder首先我們需要從@angular/forms 匯入FormBuilder:
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; export class SignupFormComponent implements OnInit { user: FormGroup; constructor(private fb: FormBuilder) {} ... }然後我們使用FormBuilder 物件提供的group() 方法,來建立FormGroup 和FormControl 物件:調整前的程式碼(未使用FormBuilder):
ngOnInit() { this.user = new FormGroup({ name: new FormControl('', [Validators.required, Validators.minLength(2)]), account: new FormGroup({ email: new FormControl('', Validators.required), confirm: new FormControl('', Validators.required) }) }); }調整後的程式碼(使用FormBuilder):
ngOnInit() { this.user = this.fb.group({ name: ['', [Validators.required, Validators.minLength(2)]], account: this.fb.group({ email: ['', Validators.required], confirm: ['', Validators.required] }) }); }對比調整前和調整後的程式碼,是不是覺得一下子方便了許多。此時更新完後完整的程式碼如下:
@Component({...}) export class SignupFormComponent implements OnInit { user: FormGroup; constructor(private fb: FormBuilder) {} ngOnInit() { this.user = this.fb.group({ name: ['', [Validators.required, Validators.minLength(2)]], account: this.fb.group({ email: ['', Validators.required], confirm: ['', Validators.required] }) }); } onSubmit({ value, valid }: { value: User, valid: boolean }) { console.log(value, valid); } }以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網! 相關推薦:
基於vue.js的dialog插件art-dialog-vue2.0的發佈內容
以上是關於Angular中響應式表單的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境