• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 一文浅析Angular中的响应式表单

一文浅析Angular中的响应式表单

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了Angular,响应式表单等相关知识,希望对您有所帮助

本篇文章带大家聊聊Angular中的响应式表单,通过实例来介绍一下简单的表单实现方法,希望对大家有所帮助!


一文浅析Angular中的响应式表单


由于最近公司框架升级,抛弃了原来手动检验表单的方式,将所有的表单改为响应式,由于之前没用过,在一开始我以为只有我没有用过,了解了小组里的其他同事得知基本都不是很熟悉

后面时间比较紧,没办法只能边做边学边改了,所以难免踩了一些坑,当然也花了一些时间学习,虽然对于熟悉的人来说可能很简单,但是还是将学习的过程和小结以及解决的问题的方法总结一下,也算是一种提炼。在这里更多的是理论结合实际业务需求来说,而不是一味的按照官方文档的方式写API介绍,如果那样就是学习笔记,而不是总结了。

为什么主要介绍响应式表单呢?因为响应式表单提供对底层表单对象模型直接、显式的访问。它们与模板驱动表单相比,更加健壮:它们的可扩展性、可复用性和可测试性都更高。适用于比较复杂的表单,其实最重要的是其他的我也不会呀。


一、响应式表单基本概念

1、FormControl 、FormArray 、FormGroup

1、FormControl: 用于追踪单个表单控件的值和验证状态,例如一个栏位绑定

//初始化一个栏位的值为测试名字,并且不可用const Name:FormControl = new FormControl({value:'测试名字', disabled: true });

2、FormArray:用于追踪表单控件数组的值和状态,例如几个栏位一起,常用的表格或者在表单中嵌入表格

//定义表单对象的属性为aliases的FormArray this.validateForm = this.fb.group({aliases: this.fb.array([]),}); //获取FormArray get aliases() {return this.validateForm.get('aliases') as FormArray;} //给FormArray 添加itemthis.aliases.push(  this.fb.group({Id: 0,Name: [null],}));

3、FormGroup:用于追踪单个表单控件的值和验证状态,它可以包含单个或多个FormControl 和 FormArray ,一般一个表单对应一个FormGroup实例,而表单的各个栏位对应FormControl 和FormArray ,当然他们可以互相嵌套,例如FormArray 中可以嵌套FormGroup,它的灵活性就是如此。

validateForm =  new FormGroup({Name: new FormControl({value:'测试名字', disabled: true }),});validateForm = this.fb.group({});

4、FormBuilder:是一个可注入的服务提供者,手动创建多个表单控件实例会非常繁琐,FormBuilder 服务提供了一些便捷方法来生成表单控件,以前每一个创建要先生成FormGroup 然后生成FormControl,而使用FormBuilder的group方法可以减少重复代码,说白了就是帮助方便生成表单

validateForm!: FormGroup;//手动创建validateForm = new FormGroup({    Name: new FormControl('测试名字'),  });   //FormBuilder表单构建器validateForm = this.fb.group({  Name:[ { value:'测试名字',disabled:true}],});


2、Validator 表单验证

表单验证用于确保用户的输入是完整和正确的。如何把单个验证器添加到表单控件中,以及如何显示表单的整体状态,通常验证器返回null表示所有的验证通过。

1、同步验证器:同步验证器函数接受一个控件实例,然后返回一组验证错误或 null,在实例化FormControl 时可以将他作为第二个参数传入

//formControlName的值必须和ts代码中FormControl 的实例一致<input type="text" id="name" class="form-control" formControlName="name" required> //判断对应的FormControl 是否没通过校验 而有错误信息<div *ngIf="name.errors?.['required']">   Name is required.</div>
//初始化一个栏位并且加入必填校验验证器const name:FormControl = new FormControl({'测试名字', disabled: true },Validators.required,); //获取这个FormControlget name() { return this.heroForm.get('name'); }

2、异步验证器:异步函数接受一个控件实例并返回一个 Promise 或 Observable ,只有在所有同步验证器都通过之后,Angular 才会运行异步验证器,在实例化FormControl 时可以将他作为第三个参数传入

3、内置验证器:例如验证一些长度,不能为空可以使用已经提供的Validator 类来实现

4、自定义验证器:系统内部提供的验证器不能满足现有需求,可以使用自定义验证器做一些个性化的校验,自定义校验器必须返回ValidationErrors类型或者空

//formControlName的值必须和ts代码中FormControl 的实例一致<input type="text" id="name" class="form-control" formControlName="name" required> //判断对应的FormControl 是否没通过校验 而有错误信息<div *ngIf="name.hasError('Invalid')">   名字也太长了吧....</div>
//初始化一个栏位并且加入必填校验验证器const name:FormControl = new FormControl({'测试名字', disabled: true },this.CustomValidators()); CustomValidators() { return (control: AbstractControl): ValidationErrors | null => {    if(control.value.length!=10)      {        return {Invalid:true}      }      return null;    };}


3、表单及元素的基本方法和属性

方法


方法使用效果setValue()使用setVlue可以设置控件FormControl 的值,但是使用时必须FormGroup所有的属性一起赋值,不能单个赋值,常用在修改加载赋值。patchValue()使用patchValue也可以设置FormControl的值,可以根据需要设置指定的FormControl,而不需要全部设置,常用在更新某个字段值reset ()FormControl 中使用重置当前控件所有状态,FormGroup中使用就是重置表单对象里的内容,例如控件被设为不可用disabled,control.reset({ value: 'Drew', disabled: true });markAsPristine()是将表单控件值标记为未改变,这个方法主要用在表单重置时,此时它的状态pristine为truemarkAsDirty()是将表单FormControl 控件值标记为已改变,此时它的状态Dirty为trueupdateValueAndValidity()重新计算表单FormControl 控件的值和验证状态等setValidators()给表单FormControl 控件设置验证器,如果设置多个就用数组"setValidators([v1,v2,v3])"disable()给表单FormControl 控件设置不可用,注意当FormControl 是disabled时,表单的常规取值getValue()对应值会为空,可用getRawValue()取原始值对象得到对应FormControl 的值enable()给表单FormControl 控件设置启用


属性


属性使用方法说明touched当表单FormControl 控件 的touched为true表示控件已经被获取焦点,反之同理untouched当untouched 为true表示控件未被获取焦点,反之同理pristine表示表单元素是纯净的,用户未操作过,
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 什么是依赖注入?在Angular中怎么实现?
  • Angular CLI发布路径的配置项浅析
  • 浅析Angular中HttpClientModule模块有什么用?怎么用?
  • 浅谈Angular中elem.scope()、elem.isolateScope和$compile(elem)(scope)中scope的区别
  • 详解Angular中的Observable(可观察对象)
  • 浅析Angular+rxjs怎么实现拖拽功能?
  • 聊聊在Angular项目中怎么实现权限控制?
  • Angular中怎么自定义视频播放器
  • 详解Angular中的NgModule(模块)
  • Angular学习之以Tooltip为例了解自定义指令

相关文章

  • 记住!不要移除WordPress的dashicons.min.css文件
  • 对英文网站优化的总结和长尾关键字的技巧运用
  • SQLSTATE[HY000]: General error: mode must be an integer
  • PS绘制质感导航按钮
  • js中!与!!的用法介绍
  • DEDECMS三级标题优化,按“三级栏目_二级栏目_一级
  • PhotoShop简单制作蓝色洁净星星文字效果教程
  • Thinkphp5分页函数paginate中的each()传入自定义参数
  • PS简单制作蓝色梦幻的透明2012字效壁纸效果教程
  • 网站文字循环变色代码

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 玩转PHP之快速生成二维码
    • Photoshop制作创意文字标志
    • vue中的math.sqrt的用法是什么
    • PHP远程采集正则图片案例
    • SyntaxHighlighter 去掉右侧滚动条的方法
    • 如何解决vue中layui报错问题
    • ThinkPHP 6.0 多语言优化扩展包的安装与使用
    • 如何利用CSS来美化滑动输入条?自定义样式方法浅析
    • 怎么解决javascript数字计算丢失精度问题?
    • Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有