首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Angular 9中验证两个selects的相同值

,可以通过使用Angular的响应式表单和自定义验证器来实现。

首先,我们需要在组件的HTML模板中定义两个select元素,并使用ngModel指令将它们与组件中的属性进行绑定。例如:

代码语言:txt
复制
<select [(ngModel)]="select1">
  <option value="option1">Option 1</option>
  <option value="option2">Option 2</option>
  <option value="option3">Option 3</option>
</select>

<select [(ngModel)]="select2">
  <option value="option1">Option 1</option>
  <option value="option2">Option 2</option>
  <option value="option3">Option 3</option>
</select>

接下来,我们需要在组件的类中定义select1和select2属性,并创建一个自定义验证器函数来检查这两个属性的值是否相同。自定义验证器函数应该返回一个验证错误对象,如果验证通过则返回null。例如:

代码语言:txt
复制
import { Component } from '@angular/core';
import { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms';

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.css']
})
export class MyComponent {
  select1: string;
  select2: string;
  form: FormGroup;

  constructor(private formBuilder: FormBuilder) {
    this.form = this.formBuilder.group({
      selects: this.formBuilder.group({
        select1: ['', Validators.required],
        select2: ['', Validators.required]
      }, { validator: this.validateSelects })
    });
  }

  validateSelects(control: AbstractControl): { [key: string]: any } | null {
    const select1Value = control.get('select1').value;
    const select2Value = control.get('select2').value;

    if (select1Value !== select2Value) {
      return { selectsNotEqual: true };
    }

    return null;
  }
}

在上面的代码中,我们使用了Angular的响应式表单和FormBuilder来创建一个表单组,并将自定义验证器函数传递给表单组的validator属性。在自定义验证器函数中,我们获取select1和select2的值,并比较它们是否相同。如果不相同,则返回一个包含selectsNotEqual属性的验证错误对象。

最后,我们可以在模板中使用formGroup和formControlName指令来绑定表单和验证器。例如:

代码语言:txt
复制
<form [formGroup]="form">
  <div formGroupName="selects">
    <select formControlName="select1">
      <option value="">Select an option</option>
      <option value="option1">Option 1</option>
      <option value="option2">Option 2</option>
      <option value="option3">Option 3</option>
    </select>

    <select formControlName="select2">
      <option value="">Select an option</option>
      <option value="option1">Option 1</option>
      <option value="option2">Option 2</option>
      <option value="option3">Option 3</option>
    </select>

    <div *ngIf="form.get('selects').hasError('selectsNotEqual')">
      The selected options must be the same.
    </div>
  </div>
</form>

在上面的代码中,我们使用formGroup指令将表单与组件中的form属性进行绑定,并使用formGroupName指令将表单组与selects属性进行绑定。然后,我们使用formControlName指令将每个select元素与相应的表单控件进行绑定。最后,我们使用*ngIf指令根据验证错误的存在与否来显示错误消息。

这样,当用户选择不同的选项时,表单将显示一个错误消息,并且提交按钮将被禁用,直到两个选项的值相同为止。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/tencentdb
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何从两个List中筛选出相同

问题 现有社保卡和身份证若干,想要匹配筛选出一一对应社保卡和身份证。 转换为List socialList,和List idList,从二者中找出匹配社保卡。...采用Hash 通过观察发现,两个list取相同部分时,每次都遍历两个list。那么,可以把判断条件放入Hash中,判断hash是否存在来代替遍历查找。...如此推出这种做法时间复杂度为O(m,n)=2m+n. 当然,更重要是这种写法更让人喜欢,天然不喜欢嵌套判断,喜欢扁平化风格。...事实上还要更快,因为hash还需要创建更多对象。然而,大部分情况下,n也就是第二个数组长度是大于3。这就是为什么说hash要更好写。...当然,另一个很重要原因是lambda stream运算符号远比嵌套循环让人喜爱。

6.1K90

老生常谈,判断两个区域是否具有相同

标签:Excel公式练习 这个问题似乎很常见,如下图1所示,有两个区域,你能够使用公式判断它们是否包含相同吗?...如果两个区域包含相同,则公式返回TRUE,否则返回FALSE。 关键是要双向比较,即不仅要以range1为基础和range2相比,还要以range2为基础和range1相比。...最简洁公式是: =AND(COUNTIF(range1,range2),COUNTIF(range2,range1)) 这是一个数组公式,输入完后要按Ctrl+Shift+Enter组合键。...看到了吧,同样问题,各种函数各显神通,都可以得到想要结果。仔细体味一下上述各个公式,相信对于编写公式水平会大有裨益。 当然,或许你有更好公式?欢迎留言。...注:有兴趣朋友可以到知识星球完美Excel社群下载本文配套示例工作簿。

1.8K20
  • 设计单链表中删除相同多余结点算法

    这是一个无序单链表,我们采用一种最笨办法,先指向首元结点,其元素为2,再遍历该结点后所有结点,若有结点元素与其相同,则删除;全部遍历完成后,我们再指向第二个结点,再进行同样操作。...看图解: 这里有两个指针变量p、q,均指向单链表首元结点,我们先不移动指针p,而是让指针q去遍历之后所有结点。...刚才我们已经删除了一个结点,那么接下来p应该指向下一个结点了: 此时让指针p指向结点与下一个结点元素比较,发现不相等,那么让q直接指向下一个结点即可:q = q -> next。...继续让q指向结点下一个结点与p指向结点元素比较,发现不相等,此时继续移动q,移动过后q指针域为NULL,说明遍历结束,此时应该移动指针p。...通过比较发现,下一个结点元素与其相等,接下来就删除下一个结点即可: 此时p指针域也为NULL,算法结束。

    2.2K10

    两个对象相同(x.equals(y) == true),但却可有不同hash code,这句话对不对?

    不对,如果两个对象x和y满足x.equals(y) == true,它们哈希码(hash code)应当相同。...Java对于eqauls方法和hashCode方法是这样规定:(1)如果两个对象相同(equals方法返回true),那么它们hashCode一定要相同;(2)如果两个对象hashCode相同,...补充:关于equals和hashCode方法,很多Java程序都知道,但很多人也就是仅仅知道而已,Joshua Bloch大作《Effective Java》(很多软件公司,《Effective Java...,多次调用x.equals(y)应该得到同样返回),而且对于任何非null引用x,x.equals(null)必须返回false。...不要将equals方法参数中Object对象替换为其他类型,重写时不要忘掉@Override注解。

    1K20

    至少两个数组中出现(哈希位运算)

    题目 给你三个整数数组 nums1、nums2 和 nums3 ,请你构造并返回一个 不同 数组,且由 至少 两个 数组中出现所有组成。 数组中元素可以按 任意 顺序排列。...示例 1: 输入:nums1 = [1,1,3,2], nums2 = [2,3], nums3 = [3] 输出:[3,2] 解释:至少两个数组中出现所有为: - 3 ,全部三个数组中都出现过...示例 2: 输入:nums1 = [3,1], nums2 = [2,3], nums3 = [1,2] 输出:[2,3,1] 解释:至少两个数组中出现所有为: - 2 ,在数组 nums2 和...示例 3: 输入:nums1 = [1,2,2], nums2 = [4,3,3], nums3 = [5] 输出:[] 解释:不存在至少两个数组中出现。...检查状态二进制是否有2个以上1 class Solution { public: vector twoOutOfThree(vector& nums1, vector

    46530

    【译】.NET Core 3.0 Preview 3中关于ASP.NET Core更新内容

    Forms&validation 此预览版本添加了用于处理表单和验证内置组件和基础结构。 使用. net进行客户端web开发一个好处是能够客户端和服务器之间共享相同实现逻辑。...EditForm将EditContext设置为一个级联相关,该用于跟踪关于编辑过程元数据(例如,已修改内容、当前验证消息等)。...SPA身份认证 这个版本,Angular和React模板中引入了对身份验证支持。...本节中,我们将展示如何创建一个新Angular或React模板,该模板允许我们对用户进行身份验证并访问受保护API资源。...注意:本文中,我们展示了对Angular身份验证支持,但在React模板中提供了相同功能。

    22.6K10

    设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1元素在前,大在后;k1相同情况下,再看k2,k2在前,大在后。满足这种要求

    题目: 设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1元素在前,大在后;k1相同情况下,再看k2,k2在前,大在后。...D.先按k2进行简单选择排序,再按k1进行直接插入排序 答题思路: 首先我们要明确题意,这一题排序是针对k1和k2全体进行,而不是说我排好k1后,再对每组相同k1进行k2排序。...(不知道有没有人有这种想法,反正我第一次做时就是这么想。但是这种排序方法要多一个对k1分组时间,时间复杂度增大了)。 另外特别注意“k1相同情况下,再看k2”这句话。...接着讨论要用算法,题中没有给什么特殊要求,所以我们要满足只是“数据项k1,k1元素在前,大在后;k1相同情况下,再看k2,k2在前,大在后”。...k1,可能k2不满足“k1相同情况下,再看k2,k2在前,大在后”。

    10010

    Angular 从入坑到挖坑 - 表单控件概览

    4.2.3、数据有效性验证 某些时候需要对于用户输入信息做有效性验证,此时可以控件上添加上原生 HTML 表单验证器来设定验证条件,当表单控件数据发生变化时,angular 会通过指令方式对数据进行验证...使用 FormBuilder 构建控件,每个控件名对应都是一个数组,第一个为控件默认,第二项和第三项则是针对这个设定同步、异步验证方法 import { Component, OnInit...同模板驱动表单数据有效性验证相同响应式表单中同样可以使用原生表单验证器,设定规则时,需要将模板中控件名对应数据第二个参数改为验证规则 响应式表单中,数据源来源于组件类,因此应该在组件类中直接把验证器函数添加到对应...{ } } 验证方法中,当数据有效时,返回 null,当数据无效时,则会返回一个对象信息,这里 nameinvalid 就是我们模板中获取到错误信息 key <div class="...<em>在</em>模板驱动表单中,因为不是直接使用<em>的</em> FormControl 实例,因此这里应该在模板上添加一个自定义<em>的</em>指令来完成对于控件数据<em>的</em>校验 使用 <em>angular</em> cli 创建一个用来进行表单<em>验证</em><em>的</em>指令 ng

    18.9K20

    Asp.Net Core WebAPI 中防御跨站请求伪造攻击

    Header 名称, 用于 XSRF 验证; options.HeaderName = "X-XSRF-TOKEN"; }); } } SecurityController.cs...Cookie , 客户端必须将这个 Cookie // 以 X-XSRF-TOKEN 为名称 Header 再发送回服务端, 才能完成 XSRF 认证。...用 X-XSRF-TOKEN Header 发送回服务端, 进行验证; 注意: 这两个 Cookie 不支持跨域请求, 只能在相同站点内请求, 也是出于安全性方面的考虑。...Angular 内置支持 Angular Http 模块内置支持 XSRF , 前提条件如下: 存在客户端可以操作名称为 XSRF-TOKEN Cookie ; 该 Cookie 不能是 HttpOnly... Cookie , 这样就回自动满足上面的服务端设置, 实现自动防御跨站请求伪造。

    1.9K10

    AngularDart4.0 指南- 表单 顶

    使用跟踪控件状态特殊CSS类提供视觉反馈。 向用户显示验证错误并启用/禁用表单控件。 使用模板引用变量HTML元素之间共享信息。 您可以Plunker中运行实例(查看源代码)并从那里下载代码。...您可以创造性地设计控件,将它们绑定到数据,指定验证规则和显示验证错误,有条件地启用或禁用特定控件,触发内置视觉反馈等等。 Angular通过许多重复,模板化任务使处理过程变得简单。...这个表格中三个字段中两个是必需。 遵循材料设计准则,必填字段带有星号(*)。 如果您删除了英雄名称,表单将以吸引人注意风格显示验证错误: ?...创建一个基本表单 一个Angular表单有两个部分:一个基于HTML模板和一个组件类,以编程方式处理数据和用户交互。 从课程开始,因为它简要地说明了英雄编辑可以做什么。...如果需要,可以将相同类型错误消息添加到中,但这不是必须,因为选择框已经将权限限制为有效

    17.5K30

    Angularjs基础(七)

    ng-model 指令绑定了两个inputh 元素到模型user 对象。           ...formCtrl 函数设置了mater 对象初始,并定义了reset()方法。           reset() 方法设置了user 对象等于master对象。           ...novalidate 属性应用中不是必须,但是你需要在 AngularJS 表单中使用,用于重写标准 HTML5 验证。...AngularJS输入验证     AngularJS表单和控件可以验证输入数据。 输入验证     AngularJS表单和控件可以提供验证功能,并对用户输入非法数据惊醒警告。...模型对象有两个属性: user 和email     我们使用了ng-show指令,color:red 邮件是$dirty 或$invalid才显示     属性:       $dirty

    2K70
    领券