• 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     }
  • 相关阅读:
    第五周课堂测试补充
    20162327WJH2016-2017-2《程序设计与数据结构》课程总结
    20162327WJH实验五——数据结构综合应用
    20162327WJH实验四——图的实现与应用
    20162327 《程序设计与数据结构》第十一周学习总结
    20162327WJH第三次实验——查找与排序2
    20162327 《程序设计与数据结构》第九周学习总结
    20162327WJH第二次实验——树
    20162327 《程序设计与数据结构》第七周学习总结
    20162327WJH使用队列:模拟票务站台代码分析
  • 原文地址:https://www.cnblogs.com/luwanying/p/9407785.html
Copyright © 2020-2023  润新知