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

为什么我的Angular表单自定义验证不能触发

Angular表单自定义验证不能触发的原因可能有多种,以下是一些可能的原因和解决方法:

  1. 表单控件未正确绑定自定义验证器:在Angular中,要使自定义验证器生效,需要将它们绑定到表单控件上。确保你的自定义验证器已经正确地绑定到表单控件。可以通过在表单控件的validators属性中添加验证器函数来实现。例如:
代码语言:txt
复制
this.myForm = this.fb.group({
  myControl: ['', [customValidator]]
});

其中,customValidator是自定义的验证器函数。

  1. 自定义验证器函数没有返回正确的验证结果:自定义验证器函数应该返回一个验证结果对象。验证结果对象包含一个布尔类型的truefalse,表示验证通过与否。如果验证结果是false,应该返回一个验证错误对象,其中包含一个错误标识和错误消息。例如:
代码语言:txt
复制
function customValidator(control: AbstractControl): ValidationErrors | null {
  if (control.value === 'something') {
    return { customError: true, message: 'Invalid value' };
  }
  return null;
}

确保你的自定义验证器函数正确地返回验证结果。

  1. 表单控件的状态未正确更新:Angular的表单控件有多种状态,如pristine(未修改过)、touched(已接触过)、valid(有效的)等。自定义验证器可能与这些状态相关联。确保表单控件的状态正确更新,以触发自定义验证器的执行。可以通过设置updateOn属性来配置表单控件的更新方式。例如:
代码语言:txt
复制
this.myForm = this.fb.group({
  myControl: ['', { validators: [customValidator], updateOn: 'blur' }]
});

其中,updateOn: 'blur'表示在表单控件失去焦点时更新状态。

  1. 表单未正确引入自定义验证器:在Angular中,要使用自定义验证器,需要将其引入到你的组件中,并在组件类中声明。确保你正确地引入了自定义验证器,并在组件类中声明了相关的变量和方法。

这些是一些可能导致Angular表单自定义验证不能触发的常见原因和解决方法。如果以上解决方法都不起作用,可能需要进一步检查代码或提供更多详细信息来获取帮助。

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

相关·内容

在实际项目开发中遇到关于ElementUI各种表单验证

-普通动态验证 官网拷贝代码,占个位置。...有的时候,迫于样式困扰,我们只能写多个输入框,而不能生成多个,在同一个下统一验证 <div style="list-style:none...100%')); } else { callback(); } }, } 第七种 动态<em>验证</em>-关联<em>验证</em> 填了租金才会<em>触发</em>对应<em>的</em>租金时间段<em>验证</em> <div v-for="...; } else { callback(); } }, 第九种 清除某一个输入项验证 如图开始选择了意向类型为按面积,此时已经验证了意向面积值,并提示错误信息,然后切换为按工位,如果不清除意向面积验证...$refs['areaForm'].clearValidate(); } } }, 最后 我们自定义验证(validator),有两种方式。

3.4K31
  • (转) 别再对 Angular 表单 ControlValueAccessor 感到迷惑

    网上有大量文章描述如何实现这个接口,但很少说到它在 Angular 表单架构里扮演什么角色,如果你不仅仅想知道如何实现,还想知道为什么这样实现,那本文正合你胃口。...本文将使用原生表单控件术语来区分 Angular 特定 formControl 和你在 html 使用表单控件,但你需要知道任何一个自定义表单控件都可以和 formControl 指令进行交互,而不是原生表单控件如...原生表单控件数量是有限,但是自定义表单控件是无限,所以 Angular 需要一种通用机制来桥接原生/自定义表单控件和 formControl 指令,而这正是 ControlValueAccessor...交互式表单控件 上面的实现还不能让我们自定义 slider 控件与父组件交互,所以还得使用输入/输出绑定来是实现组件间数据通信: export class NgxJquerySliderComponent...当实现自定义 controlValueAccessor,建议还是放在类装饰器里吧(译者注:个人建议还是学习 Angular 源码那样放在外面)。

    3.8K20

    Angular17 使用 ngx-formly 动态表单

    ngx-formly 是 Angular 应用实现响应式动态表单框架,不仅支持自动生成表单、易于上手自定义字段扩展、自定义验证扩展、支持 Formly Schema 和 JSON Schema,还有开箱即用内置表单主题...Validation 表单验证主要包括:Formly 内置验证自定义验证消息及自定义验证函数三大块,自定义验证消息和验证函数分别还可以正在全局注册和指定字段注册,在不同场景可以考虑不同自定义方式...: 到目前不通过验证字段仅仅是通过边框颜色改变区分,现在就为字段添加自定义验证消息,自定义验证消息同时支持字符串和函数两种方式设置; 全局注册自定义验证消息,需要在 FormlyModule 注册时通过...label}仅支持录入中文`, }, }, } 为字段添加自定义验证函数: 接着为新注册用户表单添加新字段:邮箱、身份证、手机号,分别非这三个字段自定义校验函数: 全局注册自定义校验函数,...label}已被使用`, }, }, } 字段默认在 change 事件发生后就会触发验证,对于异步验证来说体验就不是很好,可以通过 modelOptions.updateOn 改变验证触发时机

    58510

    为什么要创建一个不能被实例化

    但如果有一天,你发现写了这样一个类: class People: def say(self): print(f'叫做:{self.name}') def __new...__(self): raise Exception('不能实例化这个类') kingname = People() kingname.say() 一旦初始化就会报错,如下图所示:...一个不能被初始化类,有什么用? 这就要引入我们今天讨论一种设计模式——混入(Mixins)。 Python 由于多继承原因,可能会出现钻石继承[1]又叫菱形继承。...显然,这样写会报错,因为两个类实例是不能比较大小: 但在现实生活中,当我们说 某人比另一个人大时,实际上是指某人年龄比另一人年龄大。...混入: 不能包含状态(实例变量)。 包含一个或多个非抽象方法。 参考资料 [1]钻石继承: https://en.wikipedia.org/wiki/Multiple_inheritance

    3.4K10

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

    4.2.3、数据有效性验证 某些时候需要对于用户输入信息做有效性验证,此时可以在控件上添加上原生 HTML 表单验证器来设定验证条件,当表单控件数据发生变化时,angular 会通过指令方式对数据进行验证...4.4、表单自定义数据验证 4.4.1、自定义验证器 在很多情况下,原生验证规则无法满足我们需要,此时需要创建自定义验证器来实现 对于响应式表单,我们可以定义一个方法,对控件数据进行校验,之后将方法作为参数添加到控件定义处即可...from '@angular/forms'; // 引入 Validators 验证器 import { Validators } from '@angular/forms'; /** * 自定义验证方法...在模板驱动表单中,因为不是直接使用 FormControl 实例,因此这里应该在模板上添加一个自定义指令来完成对于控件数据校验 使用 angular cli 创建一个用来进行表单验证指令 ng...对于模板驱动表单,同样是采用自定义指令方式进行跨字段交叉验证,与单个控件验证不同,此时需要将指令添加到 form 标签上,然后使用模板引用变量来获取错误信息 import { Directive

    18.9K20

    Angular 2 + 折腾记 :(2)初步认识angular2,不一样开发模式

    ---- 基础概念 国内官网--基础 词汇表(又名计算机术语--angular2 & es6 & es7) 速查表:又名demo写法表,里面涵盖了很多写法,相当于一本小字典 关于ng2一堆为什么:...,ng2开发模式就是类似一个树,从根节点无限发散 import { NgModule } from '@angular/core'; // 表单模块,比如你要在组件内用到一些表单元素或者数据绑定..., |是管道,支持多个管道,支持内置管道和自定义管道,:跟随是管道参数,后续文档写一个如何自定义管道文章 []="":绑定组件内值[单向,数据流向视图],指令,原生html控件自身属性[value...---- 总结 这一篇没有涉及到路由这些和表单这些; 准备拆成两个文章来说; 路由配置及懒加载这些, 模板驱动表单及响应式表单[嵌套表单响应等],回车键触发搜索等。。...哦,还少说了服务这块,看着安排,这些说完之后就直接开搞一些小玩意,比如自定义管道,上传组件,自定义指令这些。。。发现文章有错误,或者有更好讲解,请留言指出,我会及时修正,谢谢!

    6.2K20

    AngularDart4.0 指南- 表单

    您可以创造性地设计控件,将它们绑定到数据,指定验证规则和显示验证错误,有条件地启用或禁用特定控件,触发内置视觉反馈等等。 Angular通过许多重复,模板化任务使处理过程变得简单。...为每个表单输入控件添加一个ngControl指令。 添加自定义CSS来提供视觉反馈。 显示和隐藏验证错误消息。 使用ngSubmit处理表单提交。 禁用窗体提交按钮,直到窗体有效。...为什么“ngForm”? 指令exportAs属性告诉Angular如何将引用变量链接到指令。...用ngSubmit提交表单 用户应该能够在填写表单后提交这个表单表单底部Submit按钮本身不做任何事情,但是由于它类型(type =“submit”),它会触发一个表单提交。...概要 Angular表单为数据修改,验证等提供支持。 在此页面中,您学习了如何使用以下功能: 一个HTML表单模板和一个带有@Component注解表单组件类。

    17.5K30

    SharePoint 2013自定义Providers在基于表单身份验证(Forms-Based-Authentication)中应用

    由于项目的需要,登录SharePoint Application用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Application身份验证(Claims...故本篇博客将着重笔墨去介绍SharePoint 2013自定义Providers在基于表单身份验(Forms-Based-Authentication)中应用。...更改身份验证 首先需要了解一点事,怎样去更改指定Web Application 身份验证。...小结 当以Windows Authentication注销时,会发生错误(查阅日志后报错信息encodeValue不能为空)。猜是没清理Session,查了很多资料,发现这是个别现象。...不知道最新SharePoint 2013 Updates有没有解决这个问题。版本是SharePoint 2013 Server(原始版本,从未更新过)。如果解决的话,劳烦各位朋友告诉一下。

    1.9K90

    angularjs学习第四天笔记(第一篇:简单表单验证

    您好,是一名后端开发工程师,由于工作需要,现在系统从0开始学习前端js框架之angular,每天把学习一些心得分享出来,如果有什么说不对地方,请多多指正,多多包涵这个前端菜鸟,欢迎大家点评与赐教...第四天,简单表单验证,今天主要学习了angularjs中表单验证一些基本概念及其简单应用  第一、表单验证简单理解     表单验证是angularjs中比较重要一个核心功能     表单验证可以结合...提供了一些常见系统验证,当然也可以自定义表单验证   第二、简单了解学习anjularjsz自带表单验证     1.必填验证:required,直接添加required属性即可     2.最小长度...} });     其二、先触发提交表单事件,在统一对表单数据验证,只有同验证通过才提交数据到后台处理        实现方式:可以给表单添加一个属性,初始化赋值为...,明天学习包括如下几点   表单失去焦点验证   表单提示信息展示优化,以便提高代码复用性   自定义表单验证

    1.7K10

    angular浏览器兼容性问题解决方案

    自定义页脚,加入额外页脚,来替代确定功能,此时有两种方式来实现: 只覆盖对应按钮,如确定按钮,此时按钮样式与默认页脚按钮是不一致,为保持一致,可以自定义样式,也可以直接使用默认页脚中按钮样式...-- 问题:IE浏览器下,初始化表单时,触发表单验证 原因:这个是IE问题,IE10+实现了input事件,但是触发时机却是错误。...这种方式经验证,最终效果是,初始化表单后,表单输入元素边框闪烁(红色)一下。...,插件需要自己添加到项目文件中(根据angular团队所说,这个插件修复了一个IE10或者IE11bug,但是提交了太多代码,这会给增加现有的应用打包体积,虽然后面关于这个PR讨论了挺久,但是看样子是准备把这个放到...IE输入框会因为placeholder为中文而触发表单验证,placeholder改变了也会触发表单验证,所以,有一个讨巧方法,placeholder里面的内容写成英文形式(推荐),但这显然不符合中文产品需求

    3K30

    angularjs学习第四天笔记(第一篇:简单表单验证

    您好,是一名后端开发工程师,由于工作需要,现在系统从0开始学习前端js框架之angular,每天把学习一些心得分享出来,如果有什么说不对地方,请多多指正,多多包涵这个前端菜鸟,欢迎大家点评与赐教...第四天,简单表单验证,今天主要学习了angularjs中表单验证一些基本概念及其简单应用  第一、表单验证简单理解     表单验证是angularjs中比较重要一个核心功能     表单验证可以结合...提供了一些常见系统验证,当然也可以自定义表单验证   第二、简单了解学习anjularjsz自带表单验证     1.必填验证:required,直接添加required属性即可     2.最小长度...} });     其二、先触发提交表单事件,在统一对表单数据验证,只有同验证通过才提交数据到后台处理        实现方式:可以给表单添加一个属性,初始化赋值为...,明天学习包括如下几点   表单失去焦点验证   表单提示信息展示优化,以便提高代码复用性   自定义表单验证

    1.3K20

    用编程模拟疫情传播来告诉你: 为什么现在你还不能出门

    看完视频你就明白为什么不能出门了,千万不要放松警惕!(@Ele实验室 ) 在家憋了一段时间的人们,耐心也在一点一点消磨中。很多人已经忍不住开始想蠢蠢欲动了。...他们总有一套自己理论:我们城市才一点确诊病人,而且在距离我们很远地方,就出去一会儿,哪有那么巧合,就感染上了。没事儿!大街上都没人,戴着口罩又没事。...疫情防控工作防控点或者是成功与否主要在于感染人员是否戴口罩、医院里隔离床位(或者是自我隔离位)、人口流动。...因此通过这一次疫情防控,为了你、、他,请以后感冒发烧生病之后,能够带个口罩,减少传染率。因为不知道你体内这一个病毒威力如何。 ?...因此一个疫情发生,必须依靠强大有力政府比如中国,和广大医院医生护士等伟大工作者们努力,所以平时请尽量尊重他们这个职业。 ?

    2.1K10

    关于angular和react

    data flow 反应式单向数据绑定,比传统数据绑定更简单,简单使用js事件触发改变组件状态也可以实现双向绑定效果。...简单好用module和依赖注入系统,controller中定义数据和事件,service实现不同组件之间共享数据,filter处理筛选数据,forms支持表单和复杂表单验证,简单动画模块animations...抛开跨平台和性能因素,就功能而言,angularjs已经包含了reactjs功能,只需要一个自定义directive加controller就可以轻松实现组件效果。...我们来看看react和angular实现组件方式有什么不一样。。 组件实现 ---- 很多人包括刚看到jsx时会想一个问题,靠,这货是什么玩意?...最后,到底应该用什么,看你心情吧,要赶去改bug了。。

    1.5K10

    Angular 2.x折腾记 :(2)初步认识angular2,不一样开发模式

    ({ selector: 'app-root', // 自定义元素 templateUrl: '....,ng2开发模式就是类似一个树,从根节点无限发散 import { NgModule } from '@angular/core'; // 表单模块,比如你要在组件内用到一些表单元素或者数据绑定..., |是管道,支持多个管道,支持内置管道和自定义管道,:跟随是管道参数,后续文档写一个如何自定义管道文章 []="":绑定组件内值[单向,数据流向视图],指令,原生html控件自身属性[value...数据遍历(*ngFor) *ngFor="let i of item; let index = index": 可以用这个来遍历数组对象,let index = index意思是创建一个局部遍历把当前遍历索引保存到你自定义变量...总结 这一篇没有涉及到路由这些和表单这些; 准备拆成两个文章来说; 路由配置及懒加载这些, 模板驱动表单及响应式表单[嵌套表单响应等],回车键触发搜索等。。

    10310

    7-进军 angular1.x 表单和事件、模块

    button> {{ count }}p> div> 复制代码 模块 创建模块 你可以通过 AngularJS angular.module 函数来创建模块: <div ng-app...("myApp", []); app.directive("runoobDirective", function() { return { template : "在指令构造器中创建...: $pristine 表单是否未被动过 $dirty 表单是否被动过 $valid 表单是否验证通过 $invalid 表单是否验证失败 $error 表单验证错误 控制器意义:控制器是分发者,处理临时数据...、对域($scope)进行划分 指令意义:可以重复使用,可自定义创建,如代码中compare 表单验证意义:数据真实性、可靠性保证 问题 验证表单使用数据使用?...使用对象和注意 form 表单 name 属性 注意 required 使用 $scope 是一个作用域,注意使用范围 完善 MVC 模型我们要把几个曾侧分开

    2.3K20

    关于angular和react

    data flow 反应式单向数据绑定,比传统数据绑定更简单,简单使用js事件触发改变组件状态也可以实现双向绑定效果。...简单好用module和依赖注入系统,controller中定义数据和事件,service实现不同组件之间共享数据,filter处理筛选数据,forms支持表单和复杂表单验证,简单动画模块animations...抛开跨平台和性能因素,就功能而言,angularjs已经包含了reactjs功能,只需要一个自定义directive加controller就可以轻松实现组件效果。...我们来看看react和angular实现组件方式有什么不一样。。 组件实现 很多人包括刚看到jsx时会想一个问题,靠,这货是什么玩意?...最后,到底应该用什么,看你心情吧,要赶去改bug了。。

    2.2K60
    领券