Angular 4 0之表單基礎知識介紹

2021-08-21 20:50:26 字數 3861 閱讀 5292

這兩天專案中涉及到了表單的內容,於是好好的把angular 4.0中表單的內容看了一下,總結了一些基礎的知識。總結的內容參考了以下**的內容,大佬們總結的很全,很詳細,若想對表單有進一步的加深和理解,請移步:

formcontrol:表單控制項,封裝了表單中的輸入,並提供了一些可供操縱的物件

validator:驗證器,對表單的輸入根據自己的需要新增一些限制

observer:觀察者,監聽表單的變化,並作出相應的回應

formcontrol:單一的輸入字段,封裝了字段的值和狀態,提供了一系列的公共api;獲取value時,會收到乙個「鍵值對」結構的物件。

formgroup:為一組formcontrol提供總包介面管理多個formcontrol,也提供了一系列公共的api。

formcontrol和formgroup都繼承自同乙個祖先abstractcontrol。

後續還會介紹formbuilder表單物件。

template driven forms:模板驅動式表單

reactive forms:響應式表單

required:設定表單控制項值是非空的

email:設定表單控制項值的格式時email

minlength:設定表單控制項值的最小長度

maxlength:設定表單控制項值的最大長度

pattern:設定表單控制項的值需匹配pattern對應的模式

通過物件的errors屬性來獲取對應驗證規則的驗證狀態。

valid:表單控制項有效

invalid

pristine:表單控制項值未改變

dirty:表單控制項值已改變

touched:表單控制項已被訪問過

untouched:表單控制項未被訪問

使用模板式表單,匯入formsmodule

<

form

novalidate#f

="ngform"

>

<

label

>

<

span

>

your name

span

>

<

input

type

="text"

placeholder

="please input your name"

>

label

>

form

>

把ngform的值賦給#f變數,訪問該變數可以方便的獲取該表單的值。#f變數的值,是ngform指令的匯出物件。

(1)ngmodel:直接使用該指令,沒有使用繫結或關聯任何值,這時,ngmodel將自動關聯表單控制項的name屬性,並將該值作為ngform物件的屬性名;若input輸入框未設定name屬性,則會丟擲異常。

至此,我們已經繫結了name輸入框的值,下面為輸入框設定初始值。

(2)[ngmodel]:單向資料繫結

允許我們使用this.user.name來設定name輸入框的初始值,並且該值會自動繫結到f.value物件上。

但是由於是單向資料繫結,所以當表單name輸入框的值改變時,不會同步更新到this.user.name。

此時,我們通過雙向資料繫結來實現這一功能。

(3)[(ngmodel)]:雙向資料繫結

用來管理多個ngmodel,對表單輸入內容進行分組,具體例項如下:

<

divngmodelgroup

="account"

>

<

label

>

<

span

>

email address

span

>

<

input

type

="email"

placeholder

="your email address"

name

="email"

ngmodel

>

label

>

<

label

>

<

span

>

confirm address

span

>

<

input

type

="email"

placeholder

="confirm your email address"

name

="confirm"

ngmodel

>

label

>

div>

表單中提供了ngsubmit輸出屬性,用於監聽表單的提交。

<

form

novalidate

(ngsubmit

)="onsubmit(f)"#f

="ngform"

>

...form

>

當提交表單的時候,會把f作為引數,呼叫ngsubmit關聯的onsubmit()方法。

使用響應式表單,需要匯入reactiveformsmodule

1.響應式表單中的指令:

formcontrol / formgroup / formcontrolname / formgroupname / formarrayname

在響應式表單中,我們移除了ngmodel和name=」」屬性。我們需要通過[formgroup]來繫結我們建立的mygroup物件。另外,我們還要使用formcontrolname指令,繫結我們建立的formcontrol控制項。

首先介紹一下formbuilder:

formbuild:可以理解為生產formcontrol和formgroup的工廠。乙個formbulider例項有兩個方法:

fb.control();//構造乙個formcontrol例項

fb.group();//構造乙個formgroup例項

ngoninit

() ); }

模板式表單使用方便,適用於簡單的場景;通過[(ngmodel)]實現資料的雙向資料繫結;不易於單元測試

響應式表單較為靈活,適用於複雜的場景,簡化了html模板的**,把驗證邏輯抽離到元件類中,方便跟蹤表單控制項值得變化;易於單元測試。

表單是我們實際生活中經常用到的乙個功能,在填寫表單的過程中,不乏有很多輸入框的限制及校驗,我們可以根據自己的需求自定義校驗器,這裡沒有詳細展開。

還有在驗證部分涉及到的方法也沒有詳細的說明,但是專案中有所涉及。如markasdirty()是將表單控制項值標記為已改變、markaspristine()是將表單控制項值標記為未改變,這個方法主要用在表單重置時、updatevalueandvalidity()是重新計算表單控制項的值和驗證狀態等。

以上。

Angular 4 0 內建指令

原文出處 在這篇文章中,我們將分別列舉每乙個內建指令的用法,並提供乙個例子作為演示。盡量用最少最簡單的描述,讓你在更快更準確地學會每一種內建指令的基本用法。作用 像 for 迴圈一樣,可以重複的從陣列中取值並顯示出來。例子 ts this.userinfo 張三 李四 王五 html 講解 他的語法...

angular4 0使用JSONP資料請求

ng4中有很多獲取資料的api,為了滿足跨域的需求,我選擇jsonp模組 應該有很多小夥伴遇到這個報錯吧 injected script did not invoke callback 下面我寫個完整的demo來解決這個問題。注入jsonp模組 import rxjs add operator ma...

angular4 0 路由守衛詳解

在企業應用中許可權 複雜頁多路由資料處理 進入與離開路由資料處理這些是非常常見的需求。其實angular路由守衛屬性可以幫我們做更多有意義的事,而且非常簡單。angular 的route路由引數中除了熟悉的path component外,還包括四種是否允許路由啟用與離開的屬性。這裡我們只講canac...