angularcli 第五篇(輸入框、表單處理)


本文參考:Angular4 表單快速入門

注:涉及input表單時要在AppComponent中引入 FormsModule模塊:    

import{ FormsModule } from '@angular/forms';        @NgModule({ imports: [BrowserModule, FormsModule],})

 

目錄: 

1、在 Angular 表單中,通過 [(ngModel)]="username" 指令來實現數據雙向綁定
2、添加簡單的驗證功能
3、顯示表單驗證失敗的錯誤信息
4、創建表單(添加name屬性)
5、獲取表單提交的值
6、對表單輸入內容進行分組  ngModelGroup
7、為表單的驗證狀態添加樣式信息
8、為表單的驗證狀態添加樣式信息
9、使用單選控件
10、使用多選控件
11、為多選控件添加必填驗證

<!-- 下面的代碼均是html中,同時在typescript中要定義username的初始值 -->
username = 'semlinker';

 

1、簡單的輸入框(雙向綁定)

在angular表單中通過 ngModel 指令來實現雙向綁定。

1 <!-- 1、在 Angular 表單中,通過 [(ngModel)]="username" 指令來實現數據雙向綁定 -->
2 
3 <input type="text" name="111" [(ngModel)]="username">
4 {{username}}   <!-- 獲取輸入框中輸入的值 -->

 

2、表單驗證功能

(1)目前 Angular 支持的內建 validators 如下:

    • required - 表單控件值是必填的

    • email - 表單控件值的格式是 email

    • minlength - 表單控件值的最小長度

    • maxlength - 表單控件值的最大長度

    • pattern - 表單控件的值需匹配 pattern 對應的模式

(2)如何判斷表單控件是否通過驗證?

在 Angular 中,我們可以通過  #userName="ngModel" 方式獲取 ngModel 對象,然后通過  userName.valid 判斷表單控件是否通過驗證。

 3 <!-- 2、添加簡單的驗證功能 -->
 4 <input type="text" required [(ngModel)]="username" #userName="ngModel">{{userName.valid}}

 

3、顯示驗證失敗的錯誤信息

在 Angular 中,可以通過 #userName="ngModel" 方式獲取 ngModel 對象,然后通過該對象的 errors 屬性,來獲取對應驗證規則 (如 required, minlength 等) 的驗證狀態。

1 <!-- 3、顯示表單驗證失敗的錯誤信息 -->
2     <input type="text" required minlength="3" [(ngModel)]="username" #userName="ngModel">     <!-- 必填、最小長度為3 -->
3     <div *ngIf="userName.errors?.required">請您輸入用戶名</div>                                     <!-- 輸入框為空時提示“請輸入用戶名” -->
4     <div *ngIf="userName.errors?.minlength">                                                      <!-- 長度小於最小長度時提示“用戶名長度必須大於xx,當前長度xx” -->
5         用戶名的長度必須大於 {{userName.errors?.minlength.requiredLength}},當前的長度為{{userName.errors?.minlength.actualLength}} 6     </div>

 

4、創建表單

使用<form> 標簽來創建表單,一定要注意在使用 <form> 標簽后,我們的 input 輸入框,必須添加 name 屬性。

1 <!-- 4、創建表單(添加name屬性) -->
2   <form>
3      <input name="userName" type="text" required minlength="3"[(ngModel)]="username" #userName="ngModel">
4      <div *ngIf="userName.errors?.required">請您輸入用戶名</div>
5      <div *ngIf="userName.errors?.minlength">
6          用戶名的長度必須大於 {{userName.errors?.minlength.requiredLength}},當前的長度為{{userName.errors?.minlength.actualLength}}
7      </div>
8      <button type="submit">提交</button>
9   </form>

 

5、獲取表單提交的值

在 Angular 中,我們可以通過 #loginForm="ngForm" 方式獲取 ngForm 對象,然后通過 loginForm.value 來獲取表單的值。

 1 <!-- 5、獲取表單提交的值 -->
 2    <form #loginForm="ngForm" (ngSubmit)="onSubmit(loginForm.value)">
 3      <input type="text" required minlength="3" name="username" [(ngModel)]="username" #userName="ngModel">
 4      <div *ngIf="userName.errors?.required">請您輸入用戶名</div>
 5      <div *ngIf="userName.errors?.minlength">
 6          用戶名的長度必須大於 {{userName.errors?.minlength.requiredLength}},當前的長度為{{userName.errors?.minlength.actualLength}}
 7      </div>
 8      <button type="submit">提交</button>
 9  {{loginForm.value | json}} 10    </form>
11   <!-- typescript的內容 --> 12 export class AppComponent { 13 username = 'semlinker'; 14 15 onSubmit(value) { 16 console.log(value); //打印出來是輸入框的值 17 }

 打印結果: 

 

6、對表單輸入內容進行分組  ngModelGroup

ngModelGroup 指令是 Angular 表單中提供的另一特殊指令,可以對表單輸入內容進行分組,方便我們在語義上區分不同性質的輸入。

例如聯系人的信息包括姓名及住址,現在需對姓名和住址進行精細化信息收集,姓名可精細化成姓和名字,地址可精細化成城市、區、街等。

 1 <!-- 6、對表單輸入內容進行分組  ngModelGroup -->
 2 <form #loginForm="ngForm" (ngSubmit)="onSubmit(loginForm.value)">
 3     <fieldset ngModelGroup="user">
 4         <input type="text" required minlength="3" name="username" [(ngModel)]="username" #userName="ngModel">
 5         <div *ngIf="userName.errors?.required">請您輸入用戶名</div>
 6         <div *ngIf="userName.errors?.minlength">
 7             用戶名的長度必須大於 {{userName.errors?.minlength.requiredLength}},當前的長度為 {{userName.errors?.minlength.actualLength}}
 8         </div>
 9         <input type="password" ngModel name="password">
10     </fieldset>
11     <button type="submit">提交</button>
12  {{loginForm.value | json}} 13 </form>
14 
15  <!-- typescript -->
16 export class AppComponent {
17   username = 'semlinker';
18 
19   onSubmit(value) {
20     console.dir(value);
21   }
22 }

以上代碼成功運行后,{{loginForm.value | json}} 和控制台的輸出結果:"user": { "username": "semlinker", "password": "123" } }

7、為表單的驗證狀態添加樣式信息 

在 Angular 表單中,若驗證通過則會在表單控件上添加 ng-valid 類,若驗證失敗則會在表單控件上添加 ng-invalid 類。

1 <!-- 7、為表單的驗證狀態添加樣式信息 -->
2 <!-- 在上例的基礎上添加 css 代碼 -->
3    
4     input.ng-invalid {
5         border: 3px solid red;
6     }
7     input.ng-valid {
8         border: 3px solid green;
9     }

 

8、表單控件的狀態

 在 Angular 中可以通過   #userName="ngModel" 方式獲取  ngModel 對象,進而獲取控件的狀態信息。

表單控件有以下 6 種狀態:

    • valid - 表單控件有效

    • invalid - 表單控件無效

    • pristine - 表單控件值未改變

    • dirty - 表單控件值已改變

    • touched - 表單控件已被訪問過

    • untouched - 表單控件未被訪問過

1 <!-- 8、為表單的驗證狀態添加樣式信息 -->
2   <input type="text" [(ngModel)]="username" #userName="ngModel">
3 
4   <p>Name控件的valid狀態:{{userName.valid}} - 表示控件有效</p>
5    <p>Name控件的invalid狀態:{{userName.invalid}} - 表示控件無效</p>
6    <p>Name控件的pristine狀態:{{userName.pristine}} - 表示控件值未改變</p>
7    <p>Name控件的dirty狀態:{{userName.dirty}} - 表示控件值已改變</p>
8    <p>Name控件的touched狀態:{{userName.touched}} - 表示控件已被訪問過</p>
9    <p>Name控件的untouched狀態:{{userName.untouched}} - 表示控件未被訪問過</p>

 

 

9、使用單選控件

在 Angular 中,我們通過 <input name="***" type="radio"> 方式添加單選控件。

 1 <!-- 9、使用單選控件 -->
 2     <form #loginForm="ngForm">
 3         <div *ngFor="let color of colors;">
 4             <input [attr.id]="color" name="color" ngModel required [value]="color" type="radio">
 5             <label [attr.for]="color">{{color}}</label>
 6         </div>
 7         {{loginForm.value | json}}
 8       </form>
 9 
10       <!-- typescript -->
11       export class AppComponent {
12         colors = ['紅色', '黃色', '藍色];
13     }

 

9    <p>Name控件的untouched狀態:{{userName.untouched}} - 表示控件未被訪問過</p>

 

10、使用多選控件

在 Angular 中,通過 <select name="***"> 方式添加多選控件。

 1 <!-- 10、使用多選控件 -->
 2     <form #loginForm="ngForm">
 3         <select name="color" [ngModel]="colors[0]">
 4             <option *ngFor="let color of colors;" [value]="color">
 5                 {{color}}
 6             </option>
 7         </select>
 8         {{loginForm.value | json}}
 9     </form>
10 
11     <!-- typescript -->
12       export class AppComponent {
13         colors = ['紅色', '黃色', '藍色];
14     }

 

 

11、為多選控件添加必填驗證

 1 <!-- 11、為多選控件添加必填驗證 -->
 2     <form #loginForm="ngForm">
 3         <div>
 4             <select name="color" [ngModel]="colors[0]" required>
 5                 <option *ngFor="let color of colors;" [value]="color">
 6                     {{color}}
 7                 </option>
 8             </select>
 9             <label></label>
10         </div>
11         {{loginForm.value | json}}
12     </form>
13 
14     <!-- css -->
15  select.ng-invalid + label:after { 16 content: '<-- 請做出選擇!' 17  } 18 
19     <!-- typescript -->
20       export class AppComponent {
21         colors = ['紅色', '黃色', '藍色];
22     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM