Angular响应式表单表单验证触发另一个字段校验

Angular响应式表单校验联动

  • 前言
  • 表单字段
    • 日期校验函数
    • 效果

前言

在某些业务场景中,校验某表单字段的同时也需要校验另外一个与之相关的字段,例如开始时间和结束时间,要求结束时间必须晚于开始时间。在angular 响应式表单中改如何实现该需求呢,本文带你解读一下实现细节。

表单字段

constructor(
    private router: Router,
    public activatedRoute: ActivatedRoute,
    private apiService: AccountAssetService,
    private toast: Toast,
    public fb: FormBuilder,
    private http: HttpClient,
    private configService: ConfigService
  ) {
    this.validateForm = this.fb.group({
      platCateUniqueUrl: ['', [SyncValidators.customRequired()]],
      dataAssetId: ['', []],
      devId: ['', []],
      bizId: ['', []],
      accName: ['', [SyncValidators.customRequired()]],
      password: [''],
      accStatus: ['', [SyncValidators.customRequired()]],
      oauthType: [''],
      accountJurisdiction: [''],
      accountUsageType: [''],
      beginTime: [null,[this.beginTimeSync()]],  /** 开设时间 */
      endTime: [null, [this.endTimeSync()]], /** 到期时间 */
      orgId: [''],
      perId: ['', [SyncValidators.customRequired()]],
      accRemark: [''],
    })
  }

日期校验函数

// 开始时间校验
beginTimeSync(){
    return (control: AbstractControl): SyncValidatorFnReturn => {
      const beginTime = control.value
      const endTime = control.parent?.value["endTime"]
      if (beginTime && endTime) {
        this.validateForm.get('endTime')?.updateValueAndValidity()
      }
      return null
    };
  }

// 结束时间校验
  endTimeSync() {
    return (control: AbstractControl): SyncValidatorFnReturn => {
      const beginTime =control.parent?.get("beginTime")?.value
      const endTime = control.value

      if (beginTime && endTime) {
        const beginTimeNum = beginTime.getTime()
        const endTimeNum = endTime.getTime()
        if (beginTimeNum >= endTimeNum) {
          return { validError: '到期时间必须晚于开设时间' }
        }
      }
      return null
    };
  }

效果

先选择到期时间,再选择开始时间。校验开始时间的同时自动触发到期时间的校验
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/349480.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云组态监控平台:开启智能监控新时代

在数字化浪潮中,物联网技术正逐渐成为各行业转型升级的核心驱动力。而云组态监控平台作为物联网技术的重要组成部分,正在开启智能监控的新时代。HiWoo Cloud的云组态监控平台,凭借其强大的功能和创新能力,致力于推动智能监控技术的…

uniapp app更新

uniapp app更新 这个版本要随之增加,不然刚更新时直接用app, 新包增加的那些页面跳转会有问题,不能跳新的页面 //app更新检测 updataApp(){const that this;uni.showLoading({title:加载中...})plus.runtime.getProperty(plus.runtime.appid, functio…

【微信小程序】图片违法违规内容鉴别(云函数)

微信小程序通过云调用校验一张图片是否含有违法违规内容。 选择图片: wx.chooseImage({count: 6,sizeType: [compressed], // 可以指定是原图还是压缩图,默认二者都有sourceType: [album, camera], // 可以指定来源是相册还是相机,默认二者都有success: …

用于医学分割的实时Test-time adaption

机构:约翰霍普金斯 论文:https://arxiv.org/abs/2203.05574 代码:https://github.com/jeya-maria-jose/On-The-Fly-Adaptation 摘要 基于深度学习的医学成像解决方案的一个主要问题是,当模型在不同于其训练的数据分布上进行测…

紫光展锐T760_芯片性能介绍_展锐T760安卓核心板定制

展锐T760核心板是一款基于国产5G芯片的智能模块,采用紫光展锐T760制程工艺为台积电6nm工艺,支持工艺具有出色的能效表现。其采用主流的44架构的八核设计,包括4颗2.2GHz A76核心和4颗A55核心设计,内存单元板载可达8GB Ram256GB ROM…

HCIA——29HTTP、万维网、HTML、PPP、ICMP;万维网的工作过程;HTTP 的特点HTTP 的报文结构的选择、解答

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

【python爬虫】爬虫编程技术的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏: 爬虫】网络爬虫探秘⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🌼实验目的 &#x1f…

Android开发修炼之路——(一)Android App开发基础-2

本专栏文章 上一篇 Android开发修炼之路——(一)Android App开发基础-1 2 App的工程结构 本节介绍App工程的基本结构及其常用配置,首先描述项目和模块的区别,以及工程内部各目录与配置文件的用途说明;其次阐述两种级别…

BabylonJS 6.0文档 Deep Dive 摄像机(六):遮罩层和多相机纹理

1. 使用遮罩层来处理多个摄影机和多网格物体 LayerMask是分配给每个网格(Mesh)和摄像机(Camera)的一个数。它用于位(bit)级别用来指示灯光和摄影机是否应照射或显示网格物体。默认值为0x0FFFFFFF&#xff…

SpringBoot使用druid

SpringBoot使用druid 一、前言二、配置1、pom依赖2、配置文件yml3、配置类 一、前言 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C…

【wink】草稿损坏如何恢复?

为节省储存空间,我们不会缓存您的原始视频。 原视频被删除或上传云盘后,可能会由于读取不到原视频而提示草稿损坏。 草稿损坏后,您可以尝试以下方法进行恢复: 从相册「最近删除」中恢复原视频;从云盘中下载原视频&…

单元测试——题目十二

目录 题目要求: 定义类 测试类 题目要求: 根据下列流程图编写程序实现相应处理,执行j=10*x-y返回文字“j1=:”和计算值,执行j=(x-y)*(10⁵%7)返回文字“j2=:”和计算值,执行j=y*log(x+10)返回文字“j3=:”和计算值。 编写程序代码,使用JUnit框架编写测试类对编写的…

力扣646. 最长数对链

动态规划 思路: 思路与 力扣354. 俄罗斯套娃信封问题 类似将序列进行排序,然后假设 dp[i] 为第 i 个元素的最长数对链个数;则其状态转移方程: 第 i 个元素之前的某一个元素(假设是下标是 j),如…

残留扭矩测量方法有哪些——SunTorque智能扭矩系统

残留扭矩是指在设备或机器的转动部分停机后仍然存在的扭矩,通常是由于摩擦力、粘性阻力等因素引起的。残留扭矩测量是设备维护和故障诊断的重要环节,SunTorque智能扭矩系统一起和大家学习了解几种常见的残留扭矩测量方法。 suntoruqe智能扭矩系统 静态扭…

C++技术要点总结, 面试必备, 收藏起来慢慢看

目录 1. 语言对比 1.1 C 11 新特性 2.2 C 和 C 的区别 2.3 Python 和 C 的区别 2. 编译内存相关 2.1. C 程序编译过程 2.2. C 内存管理 2.3. 栈和堆的区别 2.4. 变量的区别 2.5. 全局变量定义在头文件中有什么问题? 2.6. 内存对齐 2.7. 什么是内存泄露 …

Tomcat运维

目录 一、Tomcat简介 二、系统环境说明 1、关闭防火墙,selinux 2、安装JDK 3、安装Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2、webapps目录介绍 3、Tomcat配置介绍(conf) 4、Tomcat的管理 四、Tomcat 配置管理页面(了解) …

【Linux】从新认识Linux 服务(Service)

文章目录 Linux中service的概念Linux中常见的service常见的服务管理方式Linux中列出serviceLinux中service的特点推荐阅读 Linux中service的概念 在Linux操作系统中,服务(Service)是一个基本概念,它通常指的是运行在后台的、持续…

Vue自定义成功弹窗H5实现类似于小程序的效果

效果图: <div class="father"><div class="success-box" v-if="isSuccess"><img src="../../assets/insure/success-logo.png" alt=""><span>{{ successTitle }}</span></div> </d…

Go、容器以及Linux调度器

在容器中运行Go应用程序时&#xff0c;需要设置合理的GOMAXPROCS&#xff0c;从而避免调度中因为资源不足而造成STW。原文: Go, Containers, and the Linux Scheduler Go开发的应用程序通常部署在容器中。在容器中运行时&#xff0c;重要的一点是要设置CPU限制以确保容器不会耗…

Linux基础指令【下篇】

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.时间指令----date1…