Angular表单【响应式表单】

响应式表单:使用TypeScript创建底层模型,运用特定的指令将模版和底层ts数据模型绑定。

【1】使用TypeScript创建底层数据模型:

(1)简述数据模型:数据模型是指用来保存表单数据的数据结构,简称模型。他由定义在angular中FormsModule模块中的三个类组成,分别是:

##1.FormControl:它是一个为单个表单控件提供支持的类,可用于跟踪控件的值和验证状态,此外还提供了一系列公共API。

private nickname=new FormControl('tom');

##2.FormGroup:包含是一组 FormControl 实例,可用于跟踪 FormControl 组的值和验证状态,此外也提供了一系列公共API。

 private passwordInfo=new FormGroup({
    password:new FormControl(),
    confirmPassword:new FormControl()
  });

##3.FormArray:通常代表一个可以增长的字段集合

private emails=new FormArray([
    new FormControl('a@a.com'),
    new FormControl('b@b.com'),
  ]);

(2)创建数据模型:

方法1:

//创建数据模型
  private formModel:FormGroup;//代表整个表单所有的数据
  constructor() {
    this.formModel=new FormGroup({
      nickname:new FormControl(),
      mobile:new FormControl(),
      passwordInfo:new FormGroup({
        password:new FormControl(),
        confirmPassword:new FormControl(),
      }),
      emails:new FormArray([
        new FormControl(),
      ]),
  });
   }

方法2:使用fromBulider来配置表单数据,简化定义表单数据语法

 private formModel:FormGroup;//代表整个表单所有的数据
 private fb:FormBuilder=new FormBuilder();
 constructor() {
//使用fromBulider来配置表单数据
  this.formModel=this.fb.group({
    nickname:[''],
    mobile:[''],
    passwordInfo:this.fb.group({
      password:[''],
      confirmPassword:[''],
    }),
    emails:this.fb.array([
      [''],
    ]),
  
   });
  }

【2】模板与数据模型交互

类名                                                                                指令
FormGroupformGroup-【属性绑定指令】          formGroupName -【属性名指令】
FormControlformControl-【属性绑定指令】        formControlName -【属性名指令】
FormArray                                                         formArrayName  -【属性名指令】

属性绑定指令,需要指到后台控制器声明的属性上  [formGroup]="formModel",绑定的formModel是变量

属性名指令,直接将name的值作为其值  如:formControlName="nickname",绑定的是固定值nickname

接下来代码模板绑定:

<form [formGroup]="formModel" (submit)="createUser()" >
<div>昵称:<input type="text" formControlName="nickname"/> </div>
<div>手机:<input type="text" formControlName="mobile"/> </div>
<div formGroupName="passwordInfo">
    <div>密码<input type="text" formControlName="password"/> </div>
    <div>确认密码<input type="text" formControlName="confirmPassword"/> </div>
</div>
<div>
  邮箱:<ul formArrayName="emails">
          <li *ngFor="let email of formModel.get('emails').controls;let i=index ">
            <input [formControlName]="i" />
            <!-- 是因为email的数组中没有key,需要指定变量,这就需要属性绑定语法 -->
          </li>
       </ul>
       <button type="button" (click)="addEmail()" >添加邮箱地址</button>
</div>
<input type="submit" value="提交" />
</form>

后台实现动态添加邮箱

 addEmail(){
    let emails=this.formModel.get("emails") as FormArray;
    emails.push(new FormControl());
   
  }

提交数据:

 createUser(){
    console.log(this.formModel.value);
  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值