欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Angular模版驅(qū)動(dòng)表單的使用總結(jié)

 更新時(shí)間:2018年05月05日 10:02:13   作者:Shapeying  
這篇文章主要介紹了Angular模版驅(qū)動(dòng)表單的使用總結(jié),本文實(shí)現(xiàn)了Angular支持表單的雙向數(shù)據(jù)綁定,校驗(yàn),狀態(tài)管理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

表單的重要性就不多說(shuō)了,Angular支持表單的雙向數(shù)據(jù)綁定,校驗(yàn),狀態(tài)管理等,總結(jié)下。

獲取用戶輸入

<div class="container-fluid login-page">
 <h1>Angular表單</h1>
 <form class="login-area">
  <div class="form-group">
    <input class="form-control" type="text" name="name" id="login-name" placeholder="請(qǐng)輸入登錄帳號(hào)">
  </div>
  <div class="form-group">
   <input class="form-control"type="password" name="pwd" id="login-pwd" placeholder="請(qǐng)輸入登錄密碼">
  </div>
  <div class="form-group">
   <button type="submit" class="btn btn-block btn-success">登錄</button>
  </div>
 </form>
</div>

假如有以上簡(jiǎn)單表單,先不論優(yōu)劣,有哪些方式可以獲取到表單數(shù)據(jù)呢? 先看兩種簡(jiǎn)單粗暴的

1)事件$event的方式

在監(jiān)聽(tīng)事件的時(shí)候,將整個(gè)事件載荷 $event 傳遞到事件處理函數(shù),它會(huì)攜帶觸發(fā)元素的各種信息。這里監(jiān)聽(tīng)form元素的submit事件,將整個(gè)form的信息傳給處理函數(shù),并打印出來(lái)

<form class="login-area" (submit)="testInput($event)">
testInput ( _input: any) {
  console.dir(_input);
}

觸發(fā)submit后,查看結(jié)果。非常眼熟,就是傳統(tǒng)方式中的event嘛,后面就不用多說(shuō)了,target即為form元素,再定位到input子元素,分別獲取value即可。

為了獲取input的Value,我們傳遞了非常多的無(wú)用信息,處理函數(shù)根本就不關(guān)心元素的位置,屬性等等,它只需要value值。所以這種方式不可取

2) 模版引用變量

Angular中可以用 模版引用變量(#var)來(lái)引用DOM元素/Angular組件/指令。通常模版引用變量就是代表聲明的那個(gè)元素,當(dāng)然也可以修改指向,可以代表Angular指令(比如后續(xù)用到的ngForm指令和ngModel指令)。

// 模版引用變量代表Form元素
<form class="login-area" #test (submit)="testInput(test)">

// 模版引用變量代表ngForm指令
<form class="login-area" #test="ngForm"(submit)="testInput(test)">

從下圖可以看到不同,第一個(gè)和$event.target一樣,是DOM元素;第二個(gè)是ngForm指令,可以跟蹤每個(gè)控件的值和狀態(tài)(是否輸入過(guò)?是否校驗(yàn)通過(guò)?等等),后續(xù)會(huì)詳細(xì)說(shuō)

所以當(dāng)我們直接用模版引用變量引用input元素時(shí),就可以直接在模版中傳遞input元素的value,而不需要傳遞整個(gè)元素信息。這種方式也不好,必須要通過(guò)事件觸發(fā)才可以傳遞

 <form class="login-area" (submit)="testInput(test.value)">
  <div class="form-group">
    <input class="form-control" #test type="text" name="name" id="login-name" placeholder="請(qǐng)輸入登錄帳號(hào)">
  </div>

注意:模版引用變量的作用域是整個(gè)模版,所以在同一個(gè)模版中,不能有同名的模版引用變量

這兩種獲取表單數(shù)據(jù)的方式只是了解下,因?yàn)锳ngular提供了兩種更好的構(gòu)建表單的方式---模版驅(qū)動(dòng)表單和模型驅(qū)動(dòng)表單

模版驅(qū)動(dòng)表單

顧名思義,是使用 HTML模版 + 表單專業(yè)指令 來(lái)構(gòu)建表單。使用模版驅(qū)動(dòng)表單,記得要先在應(yīng)用模塊中import FormsModule。說(shuō)明以下幾點(diǎn):

1、模版驅(qū)動(dòng)表單使用 [(ngModel)] 語(yǔ)法進(jìn)行雙向數(shù)據(jù)綁定,非常簡(jiǎn)單就可以把表單數(shù)據(jù)綁定到模型中。注意在表單中使用[ngModel]時(shí),必須要定義name屬性,因?yàn)锳ngular在處理表單時(shí),會(huì)創(chuàng)建一些FormControl,用來(lái)跟蹤單個(gè)表單控件的值和狀態(tài),而表單控件name屬性就是鍵值,所以必須要指定name屬性。(這應(yīng)該算是指出了獲取表單數(shù)據(jù)的兩種科學(xué)的方式:[ngModel]語(yǔ)法綁定 和 通過(guò)formControl的Api獲取)

2、使用 ngForm指令,來(lái)監(jiān)聽(tīng)整個(gè)表單的有效性(valid屬性)。Angular會(huì)自動(dòng)為form表單自動(dòng)創(chuàng)建并添加ngForm指令,直接使用即可

3、使用ngModel指令,來(lái)監(jiān)聽(tīng)單個(gè)表單控件的狀態(tài),還會(huì)使用特定的Angular css來(lái)更新控件樣式 ,我們可以通過(guò)這些class來(lái)控制不同狀態(tài)時(shí),表單控件的展示 

4、表單驗(yàn)證可以使用 HTML原生的表單驗(yàn)證屬性(required , pattern , max , min 等等) ,驗(yàn)證出錯(cuò)時(shí),3中提到的errors屬性就會(huì)有對(duì)應(yīng)的錯(cuò)誤項(xiàng);

還可以自定義驗(yàn)證器,因?yàn)槟0骝?qū)動(dòng)表單不直接訪問(wèn)FormControl實(shí)例,所以需要把自定義的驗(yàn)證器用指令包裝。

通過(guò)以下栗子來(lái)展示模版驅(qū)動(dòng)表單簡(jiǎn)單使用

<!-- 模版引用變量指向ngForm指令 -->
 <form class="login-area" #testform="ngForm" (submit)="testInput()">
  <div class="form-group">
    <!-- ngModel綁定數(shù)據(jù) -->
    <!-- required 和 pattern 指定校驗(yàn)規(guī)則 -->
    <!-- 模版引用變量指向ngModel指令 -->
    <input class="form-control" type="text" name="name" id="login-name" placeholder="請(qǐng)輸入登錄帳號(hào)"
        [(ngModel)] = "user.name"  
        required
        pattern="[0-9A-z]+"
        #nameinput = "ngModel"
        >
  </div>
    <!-- 通過(guò)表單控件的狀態(tài)控制是否展示錯(cuò)誤說(shuō)明及展示何種錯(cuò)誤說(shuō)明 -->
  <div class="form-group" *ngIf="nameinput.touched&&nameinput.invalid">
    <span class="error-info" *ngIf="nameinput.errors?.required">用戶名不能為空!</span>
    <span class="error-info" *ngIf="nameinput.errors?.pattern">用戶名只能包含英文或數(shù)字!</span>
  </div>
  <div class="form-group">
   <input class="form-control" type="password" name="pwd" id="login-pwd" placeholder="請(qǐng)輸入登錄密碼"
       [(ngModel)] = "user.pwd"
       required
       #pwdinput = "ngModel">
  </div>
  <div class="form-group" *ngIf="pwdinput.touched&&pwdinput.invalid">
   <span class="error-info" *ngIf="pwdinput.errors?.required">密碼不能為空!</span>
  </div>
  <div class="form-group">
   <!-- 通過(guò)表單的狀態(tài)控制按鈕是否可用 -->
   <button type="submit" class="btn btn-block btn-success" [disabled]="testform.invalid">登錄</button>
  </div>
 </form>

通過(guò)Angular css 自動(dòng)添加的class來(lái)控制表單樣式

input.ng-invalid.ng-touched{
    border: 2px solid red;
 }

查看下效果,表單校驗(yàn)、樣式反饋、按鈕狀態(tài)管理、數(shù)據(jù)獲取都很方便。

至于如何自定義驗(yàn)證器會(huì)和模型驅(qū)動(dòng)表單的自定義驗(yàn)證器一起說(shuō)明,那就是下一篇了;隨筆中有不足的歡迎大家指正···

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

相關(guān)文章

  • 詳解AngularJS 過(guò)濾器的使用

    詳解AngularJS 過(guò)濾器的使用

    AngularJS 過(guò)濾器可用于轉(zhuǎn)換數(shù)據(jù),這篇文章主要介紹了詳解AngularJS 過(guò)濾器的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Angular中的結(jié)構(gòu)指令模式及使用詳解

    Angular中的結(jié)構(gòu)指令模式及使用詳解

    這篇文章主要為大家介紹了Angular中的結(jié)構(gòu)指令模式及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Angularjs全局變量被作用域監(jiān)聽(tīng)的正確姿勢(shì)

    Angularjs全局變量被作用域監(jiān)聽(tīng)的正確姿勢(shì)

    這篇文章主要介紹了Angularjs全局變量被作用域監(jiān)聽(tīng)的正確姿勢(shì)的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • AngularJS 霸道的過(guò)濾器小結(jié)

    AngularJS 霸道的過(guò)濾器小結(jié)

    本篇文章主要介紹了AngularJS 霸道的過(guò)濾器小結(jié),在實(shí)際操作中,我們需要對(duì)統(tǒng)一數(shù)據(jù)源進(jìn)行多次轉(zhuǎn)換,本文詳細(xì)討論有關(guān)過(guò)濾器的用法 。
    2017-04-04
  • 如何用angularjs制作一個(gè)完整的表格

    如何用angularjs制作一個(gè)完整的表格

    本文給大家分享的是使用angularjs制作一個(gè)完整的表格的真實(shí)案例,結(jié)合前幾篇的內(nèi)容,把整個(gè)完整的代碼分享給大家,有需要的小伙伴可以參考下
    2016-01-01
  • Angular短信模板校驗(yàn)代碼

    Angular短信模板校驗(yàn)代碼

    這篇文章主要介紹了Angular短信模板校驗(yàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Angular實(shí)現(xiàn)模版驅(qū)動(dòng)表單的自定義校驗(yàn)功能(密碼確認(rèn)為例)

    Angular實(shí)現(xiàn)模版驅(qū)動(dòng)表單的自定義校驗(yàn)功能(密碼確認(rèn)為例)

    這篇文章主要介紹了Angular實(shí)現(xiàn)模版驅(qū)動(dòng)表單的自定義校驗(yàn)功能(密碼確認(rèn)為例),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • angular6.0使用教程之父組件通過(guò)url傳遞id給子組件的方法

    angular6.0使用教程之父組件通過(guò)url傳遞id給子組件的方法

    這篇文章主要介紹了angular6.0使用教程之父組件通過(guò)url傳遞id給子組件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程

    Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程

    在Angular的原生指令中有這幾個(gè)指令用來(lái)控制元素的展示與否,ng-show/ng-hide/ng-if和ng-switch。在angular性能優(yōu)化中,我們也常常會(huì)用到它。這篇文章主要給大家介紹了在Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程,需要的朋友可以參考。
    2017-05-05
  • AngularJS表格樣式簡(jiǎn)單設(shè)置方法示例

    AngularJS表格樣式簡(jiǎn)單設(shè)置方法示例

    這篇文章主要介紹了AngularJS表格樣式簡(jiǎn)單設(shè)置方法,結(jié)合實(shí)例形式分析了AngularJS結(jié)合bootstrap針對(duì)表格樣式的相關(guān)設(shè)置技巧,需要的朋友可以參考下
    2017-03-03

最新評(píng)論