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

在@Input更改时触发自定义表单控件验证

在Angular中,@Input装饰器用于接收父组件传递的数据,并在数据发生变化时触发自定义表单控件的验证。当父组件的属性通过@Input装饰器绑定到子组件时,子组件可以监听这个属性的变化,并在变化时执行相应的验证逻辑。

自定义表单控件是指通过实现ControlValueAccessor接口来创建的自定义表单控件。ControlValueAccessor接口定义了一组用于读取和写入表单控件值的方法,包括registerOnChange、registerOnTouched、writeValue和setDisabledState。通过实现这个接口,我们可以创建具有自定义行为的表单控件。

当使用@Input装饰器绑定父组件的属性到子组件时,可以通过在子组件中监听属性变化的钩子函数来触发自定义表单控件的验证。常用的钩子函数有ngOnChanges和ngDoCheck。

ngOnChanges钩子函数会在父组件传递给子组件的@Input属性发生变化时被调用。我们可以在这个钩子函数中执行自定义表单控件的验证逻辑。例如,可以在ngOnChanges中调用自定义表单控件的validate方法来触发验证。

ngDoCheck钩子函数会在每个变更检测周期中被调用。我们可以在这个钩子函数中检测父组件传递给子组件的@Input属性是否发生变化,并在变化时执行相应的验证逻辑。

以下是一个示例代码,演示了如何在@Input更改时触发自定义表单控件的验证:

代码语言:typescript
复制
import { Component, Input, OnChanges } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';

@Component({
  selector: 'app-custom-input',
  template: `
    <input [(ngModel)]="value" (blur)="onTouched()">
    <div *ngIf="error">{{ error }}</div>
  `,
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: CustomInputComponent,
      multi: true
    }
  ]
})
export class CustomInputComponent implements ControlValueAccessor, OnChanges {
  @Input() value: string;
  error: string;

  private onChange: (value: string) => void;
  private onTouched: () => void;

  ngOnChanges() {
    this.validate();
  }

  validate() {
    // 执行自定义表单控件的验证逻辑
    if (!this.value) {
      this.error = '该字段不能为空';
    } else {
      this.error = '';
    }

    // 调用onChange通知表单控件值发生变化
    if (this.onChange) {
      this.onChange(this.value);
    }
  }

  // 实现ControlValueAccessor接口的方法
  writeValue(value: string) {
    this.value = value;
  }

  registerOnChange(fn: (value: string) => void) {
    this.onChange = fn;
  }

  registerOnTouched(fn: () => void) {
    this.onTouched = fn;
  }
}

在上述示例中,CustomInputComponent是一个自定义的表单控件,它接收一个@Input属性value,并在ngOnChanges钩子函数中执行验证逻辑。当value属性发生变化时,会调用validate方法进行验证,并通过onChange通知表单控件值发生变化。在模板中,我们使用ngModel指令将输入框的值与value属性进行双向绑定,并在输入框失去焦点时调用onTouched方法。

这是一个简单的示例,实际的自定义表单控件可能会有更复杂的验证逻辑和UI展示。根据具体的需求,可以使用不同的验证方式,如正则表达式验证、异步验证等。

对于腾讯云相关产品,推荐使用腾讯云云服务器(CVM)来进行服务器运维,腾讯云数据库(TencentDB)来进行数据库存储,腾讯云CDN(Content Delivery Network)来进行网络通信加速,腾讯云安全产品(如Web应用防火墙、DDoS防护等)来进行网络安全保护。具体产品介绍和链接地址可以参考腾讯云官方文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

(七十六)c#Winform自定义控件-表单验证组件

前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。...准备工作 思路如下: 1、确定哪些控件需要进行验证组件中进行属性扩展 2、定义验证规则 3、根据验证规则的正则表达式进行验证和非空验证 4、触发验证结果事件 5、进行验证结果提示 开始 添加一个验证规则枚举...get { return errorTipsForeColor; } 62 set { errorTipsForeColor = value; } 63 } 哪些控件需要进行验证... 52 [Browsable(true), Category("自定义属性"), Description("自定义验证正则表达式"), DisplayName("VerificationCustomRegex... 176 [Browsable(true), Category("自定义属性"), Description("自定义验证正则表达式"), DisplayName("VerificationCustomRegex

1.2K40

django admin详情表单显示中添加自定义控件的实现

form自带了widget控件,比如我想在里面添加一个按钮,记录用户的积分消耗情况,那么就可以类名下直接添加: from django.forms import widgets class AForm...中添加一个字段,字段中有一个widget参数,我们可以在其中设置控件,我在里面添加了一个input类型,TextInput对象中的参数attrs传入的是一个字典,我们可以在里面像写html一样写相关的css...这个时候我们就可以详情内看见button了,但是相对应的,detail的表单中添加后,add的表单中也会出现一个button,这个不是我们想要的,所以就要想办法让button只存在于detail界面中...self.base_fields是一个字典,里面添加了我们自定义的字段(我记得是的,如果有误可自行查看),通过字段name查询出该字段对象,掉用方法即可进行css样式的修改。...刷新页面即可; 以上这篇django admin详情表单显示中添加自定义控件的实现就是小编分享给大家的全部内容了,希望能给大家一个参考。

4.9K20

前端魔法堂:onsubmit和submit事件处理函数怎么不生效呢?

首先我们要明确一点的是,验证发生在与input表单控件发生交互时(输入,点击,脚本修改其值等),而不是提交表单时才触发验证。...然后再根据表单的配置和触发表单提交的方式,决定合法性验证的结果是否会阻止表单的提交。...说说HTML5下的表单合法性验证  说到合法性验证,那必须说到一个新增的类型ValidityState @interface ValidityState @description input表单控件通过...,设置为undefined或空字符串,表示不存在自定义错误信息 @event invalid - 调用表单控件的checkValidity()或reportValidity(),非法时触发该事件 下面的方法...,form和input表单控件均拥有 @method checkValidity():Boolean - 检查是否符合校验约束,若不符合则触发相应的表单控件的invalid事件 form.addEventListener

1.8K70

HTML 交互式表单验证

验证属性   下面的属性可以被用来表单控件中描述约束: required: 告诉用户必须输入一个值。...约束验证   约束验证可以用以下集中方式触发: 可以一个表单元素或者特定的表单控件上调用 checkValidity() 。这个方法会在有约束被违反的时候返回 false。...可以一个表单约束或者特定的表单控件上调用 reportValidity()。这样做会触发针对约束的交互式验证。...JavaScript 可以通过一个表单控件上侦听给定的事件来触发(例如: onchange, oninput, …) 。...input.setCustomValidity(''); } }  验证消息气泡提示   进行交互式表单验证的时候, 一个针对问题进行说明的气泡提示会显示第一个拥有被验证违反约束的数据的表单控件旁边

2.2K30

HTML 表单和约束验证的完整指南

编写自定义输入控件很困难。您必须考虑鼠标、键盘、触摸、语音、可访问性、屏幕尺寸以及 JavaScript 失败时会发生什么。您也创造不同的用户体验。...你可以: 停止验证,直到用户与字段交互或提交表单 使用自定义样式显示错误消息 提供仅在 HTML 中无法实现的自定义验证。...该valitity.valid属性执行相同的操作,但checkValidity()还会invalid该字段上触发一个可能有用的事件。...input, .invalid .help { color: red; border-color: red; } 创建自定义表单验证器 以下演示显示了一个示例联系表单,它需要用户名和电子邮件地址...如有必要,使用一点 JavaScript 来启用自定义验证和消息。 对于复杂的字段,逐步增强标准输入。 最后:忘记 Internet Explorer!

8.2K40

详细介绍 AngularJS 表单的各种特性、用法和最佳实践

本文将详细介绍 AngularJS 表单的各种特性、用法和最佳实践。1. 表单基础知识 AngularJS 中,表单是由一系列表单控件组成的。...每个表单控件都有与之关联的数据模型,可以通过这些数据模型获取和修改用户输入的值。表单控件的类型input:文本框,用于输入文本、数字等。textarea:多行文本框,用于输入长文本。...button:按钮,用于触发特定操作。表单控件的属性ng-model:绑定输入值的数据模型。ng-disabled:设置控件是否禁用。ng-required:设置控件是否必填。...自定义验证器AngularJS 还允许开发者自定义验证器,并将其应用到表单控件上。自定义验证器可以用于处理复杂的业务逻辑和自定义验证规则。...表单提交和重置通过 AngularJS,我们可以轻松地处理表单的提交和重置操作。表单提交使用 ng-submit 指令可以定义提交表单时要执行的函数。

17130

JavaScript(十三)

-- 自定义提交按钮 --> Submit Form 只要表单中存在上面列出的任何一种按钮,那么相应表单控件拥有焦点的情况下,按回车键就可以提交该表单...共有的表单字段事件 所有表单字段都支持下列 3 个事件: blur: 当前字段失去焦点时触发 focus: 当前字段获得焦点时触发 change: 对于 input 和 textarea 元素,它们失去焦点且...value 值改变时触发,对于 select 元素,在其选项改变时触发 文本框脚本 ---- HTML中,有两种方式来表现文本框: 使用 input 元素的单行文本框 使用 textarea 元素的多行文本框...API ---- 为了表单提交到服务器之前验证数据,HTML5 新增了一些功能。...浏览器自己会根据标记中的规则执行验证,然后自己显示适当的错误消息(完全不用 JavaScript 插手)。 只有某些情况下表单字段才能进行自动验证

3.3K20

AngularDart4.0 指南- 表单

使用跟踪控件状态的特殊CSS类提供视觉反馈。 向用户显示验证错误并启用/禁用表单控件。 使用模板引用变量HTML元素之间共享信息。 您可以Plunker中运行实例(查看源代码)并从那里下载代码。...您可以创造性地设计控件,将它们绑定到数据,指定验证规则和显示验证错误,有条件地启用或禁用特定控件触发内置的视觉反馈等等。 Angular通过许多重复的,模板化的任务使处理过程变得简单。...用初始表单布局创建一个模板。 使用ngModel双向数据绑定语法将数据属性绑定到每个表单控件。 为每个表单输入控件添加一个ngControl指令。 添加自定义CSS来提供视觉反馈。...每个input元素都有一个ngControl指令,Angular表单需要用这个指令表单上注册控件。 如果您现在运行应用程序并更改每个英雄model属性,表单可能会显示如下: ?...用ngSubmit提交表单 用户应该能够填写表单后提交这个表单表单底部的Submit按钮本身不做任何事情,但是由于它的类型(type =“submit”),它会触发一个表单提交。

17.4K30

validation怎么用_什么是确认validation

如果当前控件 grp1 控件之前,输入的日期不能是 grp1 日期的未来。...PS:如果希望只表单提交时验证,可以设置为空。或者设置参数 binded:false binded true 是否绑定即时验证 scroll true 屏幕自动滚动到第一个验证不通过的位置。...onFieldFailure false 控件验证失败时的回调函数 function(field){} onSuccess false 表单验证结果为通过时的回调函数 onFailure false...表单验证结果为失败时的回调函数 PS:onSuccess 和 onFailure 请参考 [Demo] onValidationComplete false 表单提交验证完成时的回调函数 [Demo...[] isOverflown false 表单是否溢出滚动的元素内(即外部元素设置了 overflow:scroll) PS:设置为 ture 后,提示内容的插入位置将更改为验证控件之前插入

2.3K10

深入讲解 ASP+ 验证

根据用户输入更新页面控件触发 Page_Load 事件。 触发更改通知事件。 页面和控件属性保存在一个隐藏字段中。 页面和控件转换到 HTML。 再次丢弃所有内容。...某个独立的字段更改时,将重新评估验证条件,根据需要使验证器可见或不可见。 当用户尝试提交表单时,将重新评估所有验证器。如果这些验证器全部有效,表单将提交给服务器。...因为每次输入更改时或提交时会执行客户端验证控件,所以客户机上通常会评估这些验证控件两次或两次以上。请注意,提交后,仍将会在服务器上对这些验证控件进行重新评估。...该函数适合于基于多个输入值的自定义验证器。 其特殊用途是启用或禁用验证器。如果您希望验证只是特定的情况下生效,可能需要在服务器和客户机上同时更改激活状态,否则,您会发现用户无法提交该页面。...该模式中,服务器函数每次往返总会触发一次,客户端函数每次尝试提交时总会触发一次。您可以使用该特性来验证其它方法无法验证控件,例如 CheckBoxList 或单独的单选按钮。

5.2K10

我是如何让公司后台管理系统焕然一新的(下)-封装组件

,但是罗列了整体的实现方案,随后我根据文章中的思路设计了这个表单组件 设计大致分为以下几个部分 表单配置项设计 表单验证 表单请求 表单控件之间的联动 调用后端接口生成表单控件的选项 表单配置项设计 根据上面的表格组件的封装思路...控制表单控件的属性 这里还用到了component标签,通过配置项的tag标签动态生成el-input表单控件,但是可以看到这里我并没有直接将tag的值设为el-input,那input是如何变成el-input...表单验证 表单验证方面尽量贴合element组件的传入方式,保持所有el-form-item标签中写的属性都写在itemAttrs中,所有表单控件中写的属性都写在attrs中,所以可以itemAttrs...中编写表单验证方面的逻辑 ?...这样,只要依赖项(这里是Model和formItems)变了,就会触发函数重新计算出新的_formItems 下拉框/单选框/复选框 表单组件中,我使用component标签动态生成表单控件,但是对于一些有子节点的表单控件通过

2K10

浅谈表单受控性及结合Hooks应用

本文中将介绍 React 中受控和非受控表单是如何使用的,以及现代化使用 hooks 来管理 form 状态。...可以实时验证和处理用户输入 不利于实时反映用户输入的值,不方便对用户输入进行验证和处理 表单的整体控制 对表单数据有更好的控制 对表单数据的控制有限 数据流 可以根据表单元素的值动态地改变其他组件的状态或行为...对于简单的表单,可以更快地实现功能。 dom更新性能 频繁的 setState 触发视图的重新渲染可能会导致性能问题。...,使得表单状态不会直接受控件影响,而是 setField/shouldUpdate/dependenciesUpdate 等逻辑触发时强制更新相依赖的控件,不会造成整个表单重新渲染的过多损耗。...具备非受控表单的优点以提高性能,并使代码简洁。

19110

AngularJS 的输入验证机制:内置验证器、自定义验证器和显示验证信息

内置验证器AngularJS 提供了一些内置的验证指令,可以直接应用到表单控件上进行输入验证。(1) 必填字段验证使用 required 属性可以标记某个字段为必填字段。...自定义验证器除了内置的验证指令,我们还可以通过自定义验证器来实现复杂的输入验证自定义验证器可以根据具体的业务需求定义验证规则,并将其应用到表单控件上。...(1) 创建验证器函数首先,我们需要创建一个验证器函数。验证器函数接收一个参数,即表单控件的值,返回一个对象作为验证结果。如果验证成功,可以返回空对象 {},否则可以返回一个包含错误信息的对象。...ng-model 属性绑定表单控件的值,并使用 ng-change 属性监听输入值的变化。...(1) $error 对象每个表单控件都有一个 $error 对象,它包含了控件验证结果。我们可以通过判断 $error 对象中的属性来确定是否发生了特定的验证错误。

17110

(转) 别再对 Angular 表单的 ControlValueAccessor 感到迷惑

input,textarea 进行交互,并且很有可能需要自定义一个表单控件作为 Angular 组件而不是使用原生表单控件,而通常自定义表单控件会封装一个使用纯 JS 写的控件如 jQuery UI's...本文我将使用原生表单控件术语来区分 Angular 特定的 formControl 和你 html 使用的表单控件,但你需要知道任何一个自定义表单控件都可以和 formControl 指令进行交互,而不是原生表单控件如...原生表单控件数量是有限的,但是自定义表单控件是无限的,所以 Angular 需要一种通用机制来桥接原生/自定义表单控件和 formControl 指令,而这正是 ControlValueAccessor...我们将使用上文提到的 jQuery UI 库的 slider 插件,来实现一个自定义表单控件吧。...registerOnChange 里我们简单保存了对回调函数 fn 的引用,回调函数是由 formControl 指令传入的(译者注:参考 L85),只要每次 slider 组件值发生改变,就会触发这个回调函数

3.7K20

Node.js建站笔记-使用react和react-router取代Backbone

global/js/dev/main.es中的path中添加如下配置: // 自定义组件 'UIComponents': './.....的submitHandler功能相同; mapping:将表单中各个input元素映射为自定义的Object。...mapping并不是必须的; onValid:表单中各元素都验证通过后触发; onInvalid:与onValid相反,表单中任何一个元素验证不通过就会触发onInvalid,一般与onValid配合控制...经本人验证,只有组件中state以某个属性直接使用(比如className={{this.state.emptyError}}这种)的情况下,setState才会触发重绘。...默认情况下formsy的input控件都是原始值,换句话说就是它们还没有被触及。当formsy组件的setValue被调用后,input控件便不再是原始的了。

2.2K90

React—表单及事件处理

HTML中,表单元素与其他元素最大的不同是它自带值或数据,而且我们的应用中,只要是有表单出现的地方,就会有用户输入,就会有表单事件触发,就会涉及的数据处理。...非受控组件: 类似于传统的DOM表单控件,用户输入不会直接引起应用state的变化,我们也不会直接为非受控组件传入值。...但正如我们对受控组件的定义,想让受控组件正常工作,每一个受控组件我们都需要为其编写事件处理函数,有的时候确实会很烦人,比方说一个注册表单你需要写出所有验证姓名电话邮箱验证码的逻辑,当然也有一些小技巧可以让同一个事件处理函数应用在多个表单组件上...更有可能我们是在对已有的项目进行重构,除了React之外还有一些别的库需要和表单交互,这时候使用非受控组件可能会方便一些。...相关事件触发的处理函数中,我们需要根据表单元素中用户的输入,对应用数据进行相应的操作和改变,来看下面这个例子: class ControlledInput extends React.Component

1.4K30
领券