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

news2024/10/3 8:17:37

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Numpy的学习 第三课 数组的相关数学使用

1. 聚合函数 注意这些都是针对数组或者其他来进行操作的 1. sum/min/max/average 我们一般只用前两个 第一个是数组,第二个是行 列 和之前一样,但是又不太一样 这里,0时,是每一列的值,1时,是每一行的…

DataKit迁移MySQL到openGauss

前言 本文将分享DataKit迁移MySQL到openGauss的项目实战,供广大openGauss爱好者参考。 1. 下载操作系统 https://www.openeuler.org/zh/download https://support.huawei.com/enterprise/zh/doc/EDOC1100332931/1a643956 https://support.huawei.com/enterprise…

3d gaussian splatting介绍整理

3D 高斯分布是用于实时辐射场渲染的 3D 高斯分布中描述的一种光栅化技术,它允许实时渲染从小图像样本中学习到的逼真场景。 paper github 本文翻译整理自: blog: Introduction to 3D Gaussian Splatting DDPMs - Part 2 给出一些2D图片,用…

uniapp组件库Line 线条 的适用方法

目录 #平台差异说明 #基本使用 #线条类型 1.3.7 #兼容性 #API #Props 此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。 #平台差异说明 AppH5微信小程序支付宝小程序百…

JVM系列-8.GC调优

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理🔥如果感觉博主的文…

C++哈希表模拟实现unordered_map 与unordered_set

哈希概念 unordered系列的关联式容器(如unordered_map unordered_set) 之所以效率比较高,是因为其底层使用了哈希结构 顺序结构以及平衡树 中,元素关键码与其存储位置之间没有对应的关系,因此在 查找一个元素 时&am…

C#-前后端分离连接mysql数据库封装接口

C#是世界上最好的语言 新建项目 如下图所示选择框红的项目 然后新建 文件夹 Common 并新建类文件 名字任意 文件内容如下 因为要连接的是mysql数据库 所以需要安装 MySql.Data.MySqlClient 依赖; using MySql.Data.MySqlClient; using System.Data;namespace WebApplication1.…

git用法总结

以gitee为例,GitHub也可参考本文 创建远程仓库 在自己的gitee主页 创建本地仓库 在文件夹下,右键→git bash here git init添加gitignore vi .gitignoregitignore里的内容根据自己实际情况设置,这里举个例子 # #开头的是注释 # Prer…

【LeetCode】每日一题 2024_1_25 计算 K 置位下标对应元素的和(位运算/调库)

文章目录 LeetCode?启动!!!题目:计算 K 置位下标对应元素的和题目描述代码与解题思路 LeetCode?启动!!! 今天状态调整正式结束,寒假学习正式开始。 题目&…

编程笔记 html5cssjs 056 CSS不透明度

编程笔记 html5&css&js 056 CSS不透明度 一、CSS 不透明度 / 透明度二、使用 RGBA 的透明度三、透明盒中的文本小结 不透明度/透明度。利用透明度可以提高页面的层次效果。 一、CSS 不透明度 / 透明度 opacity 属性指定元素的不透明度/透明度。 opacity 属性通常与 :h…

Python学习07—字符串类型及操作

一、字符串类型的表示 字符串是由0个或多个字符组成的有序序列。字符串可由一对单引号或一对双引号表示。由于字符串是有序序列,因此,可以对其中的字符进行索引,且在索引时,字符是从0开始编号。 字符串有两类和四种表示方式&…

简述云原生基础定义及关键技术

云原生是什么 云原生是面向“云”而设计的应用,因此技术部分依赖于传统云计算的 3 层概念,基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。 例如,敏捷的不可变基础设施交付类似于 IaaS,用来提供计算网络存储等基础资源,这些资源是可编程且不可变的,直…

关于MySQL的基本查询(多表查询等)

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下: CREATE…

动态规划之买卖股票问题(篇二)(买卖股票的最佳时机)

本篇博客主要讲解123.买卖股票的最佳时机III和188.买卖股票的最佳时机IV,是上篇博客中动态规划之买卖股票问题(篇一)(买卖股票的最佳时机)股票问题的进阶。 123.买卖股票的最佳时机III 题目: 给定一个数…

11k+ star 一款不错的笔记leanote安装教程

特点 支持普通模式 支持markdown模式 支持搜索 安装教程 1.安装mongodb 1.1.下载 #下载 cd /opt wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz 1.2解压 tar -xvf mongodb-linux-x86_64-3.0.1.tgz 1.3配置mongodb环境变量 vim /etc/profile 增…

【软件测试】学习笔记-构建并执行 JMeter 脚本的正确姿势

有些团队在组建之初往往并没有配置性能测试人员,后来随着公司业务体量的上升,开始有了性能测试的需求,很多公司为了节约成本会在业务测试团队里选一些技术能力不错的同学进行性能测试,但这些同学也是摸着石头过河。他们会去网上寻…

Go语言指针变量

1. 指针变量 区别于C/C中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 Go语言中的指针3个概念:指针地址、指针类型和指针取值。 1.1. Go语言中的指针 Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候&a…

zuul网关

zuul网关 zuul自定义过滤器hystrix和ribbon时间RibbonAutoConfiguration自动配置FeignAutoConfiguration自动配置RibbonEurekaAutoConfigurationSendErrorFilter过滤器EnableZuulServerHasFeatures EnableZuulProxy zuul自定义过滤器 继承ZuulFilter类,实现其方法f…

【论文笔记】Learning Deconvolution Network for Semantic Segmentation

重要说明:严格来说,论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍,请参考另一篇博客:什么是Deconvolutional Network? 一、参考资料 Learning Deconvolution Netwo…

十分钟搭建本地Linux开发运行环境

十分钟搭建本地开运行环境 linux环境请参考:5分钟搭建本地linux开发环境 环境:宝塔、Jdk、Mysql、Redis 1、宝塔: 官网地址:宝塔官网 yum install -y wget && wget -O install.sh https://download.bt.cn/install/in…