以我的项目作为示例,总结一下Angular响应式表单的应用和常用的方法:

1.创建表单

form.ts代码

import { Component, OnInit } from "@angular/core";
import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";@Component({selector: "app-form",templateUrl: "./form.component.html"
})
export class SLSDetailComponent implements OnInit{slsForm: FormGroup;//定义表单slsFormngOnInit(): void {this.createForm();//初始化创建表单}createForm() {//创建项目需要的数据(多层嵌套的数据)this.slsForm = this.fb.group({UserServiceDescription: this.fb.group({}),VPL: this.fb.group({})});}//setControl设置值this.slsForm.setControl("UserServiceDescription",this.fb.group({sgServiceIdRef: [sls.desc.sgServiceIdRef],serviceId: [sls.desc.serviceId,[Validators.required, Validators.min(0)]],serviceStatus: [sls.desc.serviceStatus, Validators.required],Name: this.fb.array(sls.desc.names.map(name => this.fb.group(name))),ServiceLanguage: this.fb.array(sls.desc.serviceLanguages.map(lang => this.fb.control(lang)))}));this.slsForm.setControl("VPL",this.fb.group({CT: this.fb.array(sls.vpl.cts.map(ct => this.createCtForm(ct))),UC: this.fb.array(sls.vpl.unicasts.map(uc => this.createUcForm(uc))),VOD: this.fb.array(sls.vpl.unicastVods.map(vod => this.createVodForm(vod))),BFP: this.fb.array(sls.vpl.bfps.map(bfp => this.createBfpForm(bfp)))}));}

访问FormGroup、FormArray方法:

get userServiceDescription(): FormGroup {return this.slsForm.get("UserServiceDescription") as FormGroup;}get vpl(): FormGroup {return this.slsForm.get("VPL") as FormGroup;}get names(): FormArray {return this.userServiceDescription.get("Name") as FormArray;}get serviceLanguages(): FormArray {return this.userServiceDescription.get("ServiceLanguage") as FormArray;}get cts(): FormArray {return this.vpl.get("CT") as FormArray;}//访问某个FormArray下的FormArray(双层嵌套)getCtCtUrls(index: number): FormArray {return this.cts.at(index).get("CtUrl") as FormArray;}

为FormArray添加一条数据:

addName(name?: Name) {let newName = name ? name : SchemaService.defaultServiceName;this.names.push(this.fb.group({text: [newName.text, Validators.required],lang: [newName.lang]}));}

删除某条FormArray中的数据:

deleteFromFormArray(formArray: FormArray, index: number) {formArray.removeAt(index);}

全部删除FormArray的数据:

deleteAll(formArray: FormArray) {formArray.controls.splice(0);formArray.setValue([]);}

patchValue设置某个FormControl的值,更新表单的值:

 onServiceIdSelected(serviceId: string) {this.slsForm.patchValue({UserServiceDescription: {sgServiceIdRef: serviceId}});
}

patchValue和setValue:

https://blog.csdn.net/qq_29483485/article/details/86542959

Angular中响应式表单 FormBuilder、FormControl 、FormGroup、FormArray、setControl、setValue用法总结相关推荐

  1. 灵雀云前端: Angular 响应式表单

    Kubernetes 对象实战 简介 Kubernetes 集群的使用者日常工作中经常需要与 Deployment 等 Kubernetes 对象接触.熟悉 Kubernetes 的朋友都会知道,Ku ...

  2. Angular 响应式表单

    Kubernetes 对象实战 简介 Kubernetes 集群的使用者日常工作中经常需要与 Deployment 等 Kubernetes 对象接触.熟悉 Kubernetes 的朋友都会知道,Ku ...

  3. angular6的响应式表单

    1:在AppModule模块里面引入 ReactiveFormsModule 要使用响应式表单,就要从@angular/forms包中导入ReactiveFormsModule,并把它添加到你的NgM ...

  4. Angular4模板式表单、响应式表单、表单状态字段

    时隔十多天我(独臂侠 灰常怀念两只胳膊~~(><)~~)又来了,之前是第三章的内容,今天先写*第七章表单处理*的内容吧,内容太多了,有必要记下来,如果有幸被看到欢迎指正^^ 表单有: - ...

  5. Angular响应式表单及表单验证

    1. 什么是响应式表单? 响应式表单提供了一种模型驱动的方式来处理表单输入,其中的值会随时间而变化. 响应式表单使用显示的,不可变的方式,管理表单在特定时间点上的状态.对表单状态的每一次变更都会返回一 ...

  6. Angular Reactive Forms -- Model-Driven Forms响应式表单

    Angular 4.x 中有两种表单: Template-Driven Forms - 模板驱动式表单 (类似于 AngularJS 1.x 中的表单 )  官方文档:https://v2.angul ...

  7. Angular 响应式表单 patchValue和setValue

    在 Angular 4 中有多种方式可以更新表单的值,对于使用响应式表单的场景,我们可以通过框架内部提供的 API ,(如 patchValue 和 setValue )方便地更新表单的值.这篇文章我 ...

  8. Angular 响应式表单 基础例子

    1.案例需求 表单提交,表单全部校验成功才能提交,当表单校验错误,表单边框变红,同时有错误提示信息,有重置功能 2.代码分析 在线预览 git仓库 本案例中使用了响应式表单,响应式表单在表单的校验方面 ...

  9. Angular2响应式表单

    本文将半翻译半总结的讲讲ng2官网的另一个未翻译高级教程页面. 原文地址. 文章目的是使用ng2提供的响应式表单技术快速搭出功能完善丰富的界面表单组件. 响应式表单是一项响应式风格的ng2技术,本文将 ...

最新文章

  1. sqlserver大数据归档
  2. python读取配置文件失败原因_python读取配置文件报keyerror-文件路径不正确导致的错误...
  3. 详解MySQL执行事务的语法和流程
  4. Springboot2数据访问
  5. threejs 源码解析_threejs demo
  6. VLAN与Trunk的原理及配置
  7. 数据同步问题与解决方案:增量全量、数据漂移,数据更新、
  8. 在Unity中使用Photon(网络多人联机)
  9. 惠普HP LaserJet Pro P1106 打印机驱动
  10. JavaScript实现购物车计算价格功能
  11. PSINS_Toolbox使用心得1
  12. AMD将坚持x86架构,不会投身ARM架构怀抱
  13. rabbitmq java 测试_RabbitMQ 简单测试
  14. java集成paypal支付,含Android,服务端代码
  15. Tomcat打破双亲委派模型
  16. 文献综述 笔记软件_论坛软件综述
  17. 内存缓存(from memory cache)和硬盘缓存(from disk cache) 的区别
  18. M8W2 | 每周新产品体验
  19. 2023MathorCup数学建模比赛的思路汇总帖
  20. 读书笔记 - 实现领域驱动设计

热门文章

  1. 感觉自己应该重新读一次Javascript
  2. ap_invoice_distributions_all到xla_ae_lines
  3. Python办公自动化(八)|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转
  4. Ubunt更换阿里云镜像源
  5. 阿里云开源镜像站下载最新Ubuntu和CentOS镜像
  6. 使用Maven导出war包
  7. 力扣题目——700. 二叉搜索树中的搜索
  8. 前台ajax请求php后台返回成功却进error方法解决
  9. 解决新电脑的系统安装问题:针对BIOS的UEFI模式
  10. 深度学习解决NLP问题:语义相似度计算