1. 程式人生 > >Angular開發(十一)-關於響應式表單及表單的校驗

Angular開發(十一)-關於響應式表單及表單的校驗

一、響應式表單定義

響應式表單:我們在元件中建立表單控制元件的物件樹,並使用特定的方式將繫結到元件模板中的原聲表單控制元件元素上

二、響應式表單的好處

我們可以在元件類中直接建立和維護表單控制元件物件。由於元件類可以同時訪問資料模型和表單控制元件結構, 因此我們可以把表單模型值的變化推送到表單控制元件中,並把變化後的值拉取回來。 元件可以監聽表單控制元件狀態的變化,並對此做出響應

三、響應式表單中涉及到的詞彙及含義

詞彙 解釋 使用場景
formControl 使用者跟蹤一個單獨表單控制元件的值和有效性狀態
formGroup 使用者跟蹤一組表單控制元件的值和有效性狀態
FormArray 有序陣列的值和有效性

四、formControl簡單的使用

public name1 = new FormControl(初始值,驗證器陣列,一部驗證器陣列)
<input type="text" class="form-control" [formControl]="name1">

五、formGroup的使用

public formgroup = new FormGroup({
    name:new FormControl("你好"),
    password:new
FormControl("",Validators.required) })

在html頁面中可以通過:
* 1、formgroup.value獲取表單中全部的值
* 2、formgroup.status檢驗表單當前是處於什麼狀態

<form role="form" [formGroup]="formgroup" novalidate>
    <div class="form-group">
        <label>使用者名稱:</label>
        <input type="text" class="form-control"
formControlName="name" />
</div> <div class="form-group"> <label>密碼:</label> <input type="password" class="form-control" formControlName="password" /> </div> </form> <p>Form value: {{ formgroup.value | json }}</p> <p>Form status: {{ formgroup.status | json }}</p>

六、與FormBuilder結合使用,官方解釋

修改元件程式碼

    ...
    constructor(private fb : FormBuilder) {
        this.createForm();
    }
    public formgroup : FormGroup;
    createForm() {
        this.formgroup = this.fb.group({
              name: new FormControl("你好"), //下面幾種方式也可以
              password: ["",Validators.required],
              city:''
        })
    }
    ....

七、多個FormGroup的使用

專案中表單越來越複雜,那麼就可以使用多個FormGroup來區分使用

<fieldset formGroupName="password">
    <div class="form-group">
        <label>密碼:</label>
        <input type="password" class="form-control" formControlName="first" />
    </div>
    <div class="form-group">
        <label>確認密碼:</label>
        <input type="password" class="form-control" formControlName="last" />
    </div>
</fieldset>
createForm() {
    this.formgroup = this.fb.group({
        name: new FormControl("你好"), 
        password: this.fb.group({
            first:'',
            last:''
        }),
        city:'',
        state:'',
        sex:["",Validators.required],
        hobby:''
    })
}

八、獲取FromControl的屬性

屬性 說明
value FormControl的值。
status FormControl的有效性。可能的值有VALID、INVALID、PENDINGDISABLED
pristine 如果使用者尚未改變過這個控制元件的值,則為true。它總是與myControl.dirty相反。
untouched 如果使用者尚未進入這個HTML控制元件,也沒有觸發過它的blur(失去焦點)事件,則為true。 它是myControl.touched的反義詞。

使用方式

<input type="text" class="form-control" [formControl]="name1">
<div>{{name1.value}}</div>
<div>{{name1.status}}</div>
<div>{{name1.pristine}}</div>
<div>{{name1.untouched}}</div>
<input type="text" class="form-control" formControlName="city" />
<p>{{formgroup.get("city").value}}</p>

九、關於賦值、修改、提取

  • 1、給form表單裡面的formControl賦值

    • 前面就提到了,直接在建立的時候賦值就可以傳遞到html頁面
    • 使用setValue(嘗試失敗,直接使用patchValue)
  • 2、修改值使用patchValue

    //修改值
    edit(){
        this.formgroup.patchValue({
            name:"我不是很好"
        })
    }
  • 3、提取表單值

    <form role="form" [formGroup]="formgroup" novalidate (ngSubmit)="postData()">
    ....
    </form>
    //提交資料
    postData(){
        console.log(this.formgroup.value);
    }

十、表單的校驗

  • 1、使用自帶的校驗器

    • Validators.required必填欄位
    • Validators.minLength 最小長度
    • Validators.maxLength最大長度

      username:["",[Validators.required,Validators.minLength(3),Validators.maxLength(6)]],
      <!--還沒封住指令-->
      <div class="form-group">
          <label>使用者名稱:</label>
          <input type="text" [class]="!myform.get('username').untouched?(myform.get('username').status==='VALID'?'form-control':'form-control error'):'form-control'" formControlName="username">
          <!--如果沒有訪問的時候或者不含有required的時候隱藏-->
          <p [hidden]="myform.get('username').untouched || !myform.hasError('required','username')" class="text-danger">使用者名稱必填</p>
          <p [hidden]="myform.get('username').untouched || (!myform.hasError('minlength','username') ? !myform.hasError('maxlength','username'):null)" class="text-danger">使用者名稱長度有誤</p>
      </div>
  • 2、自定義校驗器

    • 直接定義在元件內

      //定義一個手機號碼的校驗器
        mobileValidator(control:FormControl):any{
          var reg = /^1[34578]\d{9}$/;
          let valid = reg.test(control.value);
          //如果驗證通過就返回null否則就返回手機號碼格式有誤
          return valid ? null:{moblie:"手機號碼格式有誤"};
        }
      //使用
      mobile_num:["",[Validators.required,this.mobileValidator]],
    • 定義一個服務注入到元件中(自行看程式碼實現)

相關推薦

Angular開發()-關於響應

一、響應式表單定義 響應式表單:我們在元件中建立表單控制元件的物件樹,並使用特定的方式將繫結到元件模板中的原聲表單控制元件元素上 二、響應式表單的好處 我們可以在元件類中直接建立

Flask Web開發)基於python的Web

做一個簡單的web表單,當你輸入使用者名稱的時候會產生相應的歡迎資訊,效果展示如下: 其實空字元提交時會出現一行Resquired()函式產生的提醒文字,截圖時點選螢幕就消失了。。。。 看到導航欄裡有兩個選項,在head中有標籤圖示,這些都是在下

[轉]Angular開發(八)-路由的基本認識

console blog subscribe oid 兩個 vat bootstra script 使用實例 本文轉自:https://blog.csdn.net/kuangshp128/article/details/72626066 版權聲明:本文為博主原創文章,未經

() 整合spring cloud雲架構 - SSO點登錄之OAuth2.0登錄流程(2)

src abc ear 技術支持 expires 簡單的 style min 參數 上一篇是站在巨人的肩膀上去研究OAuth2.0,也是為了快速幫助大家認識OAuth2.0,閑話少說,我根據框架中OAuth2.0的使用總結,畫了一個簡單的流程圖(根據用戶名+密碼實現OAut

嵌入式Linux開發——()u-boot原始碼分析

1、U-Boot的特性:     ①開放原始碼     ②支援多種嵌入式作業系統核心:Linux、NetBSD、VxWorks、QNx、RTEMS、ARTOS、 LynxOS     ③支援多種架構的CPU:Power

Java架構-() 整合spring cloud雲架構 - SSO點登入之OAuth2.0登入流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是為了快速幫助大家認識OAuth2.0,閒話少說,我根據框架中OAuth2.0的使用總結,畫了一個簡單的流程圖(根據使用者名稱+密碼實現OAuth2.0的登入認證): 上面的圖很清楚的描述了當前登入login的流程,現在我們針對於log

Angular開發(八)-路由的基本認識

一、學單詞:angular路由中涉及到很多新單詞詞彙 單詞 說明 使用場景 Routes 配置路由,儲存URL對應的元件,以及在哪個RouterOutlet中展現 RouterOutlet 在html中標記掛載路由的佔位容器

Angular開發(二)-自定義指令

在第四章的時候我們學習了angular的通用指令(通用指令地址),本章中我們自定義指令。 本人理解自定義指令是擴充套件傳統的HTML語法,類似傳遞HTML語法中的class,style,id

微信小程式開發()五星好評

在之前的原生iOS開發中寫了一個《【iOS】星星評分控制元件HGDQStars》,這個在原生開發裡面可以給出0~5之間的任意一個分數,使用起來也很方便。 最近在做小程式開發,也需要一個五星好評的控制元件,這次寫的只能給1,2,3,4,5這幾個固定的分數,但是對

WiFi-ESP8266入門開發()-使用PWM

注:對於ESP8266開源技術感興趣的可以加群,我們一起探索交流學習,群號:579932824。群名:ESP8266開源技術交流群。 介紹 脈寬調製(Pulse Width Modulation,PWM)是在保持波的頻率不變的同時改變脈寬的技術。 PWM生成

Linux驅動開發:分層分離LED子系統

本例根據韋東山視訊第二期的第14課  分層分離而來,用QT6410實踐 本例為點亮LED: 最簡單的led驅動就是從埠輸出0或1來關閉或點亮燈。而我們這裡講的led子系統,主要是對led事件進行了分裝和優化,這裡我們主要講的是可以實現跨平臺的led驅動。不管你是使用三

Unity實戰 RTS3D即時戰略遊戲開發() 單位生產

      大家好,我是Zander,我們接著來開發Rts3D即時戰略遊戲開發。在 遊戲中我們要建築也能生產無人機,這一章我們就來實現一下具體操作。       首先在Actions資料夾下建立CreateUnitAction指令碼並編輯,如下:using UnityEng

HTML和CSS高階指南整理(04) 響應網站設計

本節主要內容 HTML 響應式設計概述 視窗 CSS 流式佈局 媒體查詢 移動第一 流式媒體 內容概覽 網際網路發展的速度超乎所有人的想象,甚至可以說是瘋狂。在過去幾年裡,移動網際網路的發展已經開始嶄露頭角。而他的發展速度也遠遠超過了傳統網際網

響應Web設計框架

轉自:http://www.csdn.net/article/2014-05-13/2819739-responsive-frameworks-for-web-design 對於設計師而言,網站設計中的任意一環節都不容忽視。時下,藉助網上的一些資源,只需簡單的幾個步驟你

Java微信公眾平臺開發()--微信JSSDK中Config配置

JSSDK曾經引爆前端以及後端的工程師,其魔性的力量毋庸置疑,在我們的技術眼裡它的實現原理和根本是不能夠被改變的,這篇文章就不對其js的實現做任何評價和解說了(因為我也不是很懂,哈哈),這裡要說的是它的config配置實現,參考文件:http://mp.weixin.qq.com/wiki/11/74ad12

vue系列---響應原理實現Observer原始碼解析()

閱讀目錄 一. 什麼是響應式? 二:如何偵測資料的變化? 2.1 Object.defineProperty() 偵測物件屬性值變化 2.2 如何偵測陣列的索引值的變化 2.3 如何監聽陣列內容的增加或減少? 2.4 使用Proxy來實現資料監聽 三. Observer原始碼解析

函數響應編程ReactiveObjC學習筆記 (二)

per 舉例 def nsobject uibutton 為我 string method 寫法 之前我們初步認識了RAC的設計思路跟實現方式, 現在我們再來看看如果使用它以及它能幫我們做什麽 One of the major advantages of RAC is

愛創課堂每日題第天常見web安全防護原理

前端 前端學習 前端入門sql註入原理就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。總的來說有以下幾點: 1.永遠不要信任用戶的輸入,要對用戶的輸入進行校驗,可以通過正則表達式,或限制長度,對單引號和雙"-"進行轉換等。 2

TCP協議的種狀態集,子網劃分

stat 四次揮手 建立 pad word 劃分 dos ott pro 第1章 tcp協議的十一種狀態集轉換1.1 tcp三次握手狀態集的轉換 (5種狀態集)服務端和客戶端初始狀態:closed狀態1. 服務端:開啟服務程序,其實創建socket(5元組概念),由clos

Jmeter(二)Jmeter常見問題場景應用

con 當前 登陸 log jenkins path 業務 參數 以及   Jmeter作為工具來講,已經是一個相對比較牛掰的工具,除了它能夠支持那麽多協議以及方法之外,更在與它的前置處理以及後置處理、同步監控的人性化。當然,所有的工具、框架都是作為業務的支撐,如果不能滿足