Angular 2 中条件必需的验证器指令

2024-01-10

我需要根据其他字段的值将某些表单字段设置为必需或不必需。内置的必需的验证器 https://angular.io/docs/ts/latest/api/common/RequiredValidator-directive.html指令似乎不支持这一点,所以我创建了自己的指令:

@Directive({
  selector: '[myRequired][ngControl]',
  providers: [new Provider(NG_VALIDATORS, { useExisting: forwardRef(() => MyRequiredValidator), multi: true })]
})
class MyRequiredValidator {
  @Input('myRequired') required: boolean;

  validate(control: AbstractControl): { [key: string]: any } {
    return this.required && !control.value
      ? { myRequired: true }
      : null;
  }
}

使用示例:

<form>
  <p><label><input type="checkbox" [(ngModel)]="isNameRequired"> Is Name Required?</label></p>
  <p><label>Name: <input type="text" [myRequired]="isNameRequired" #nameControl="ngForm" ngControl="name" [(ngModel)]="name"></label></p>
  <p *ngIf="nameControl.control?.hasError('myRequired')">This field is required.</p>
</form>

如果用户首先切换复选框,然后在文本框中键入或删除文本,则效果很好。但是,如果用户在文本框为空时切换复选框,则验证消息不会正确更新。

我该如何修改MyRequiredValidator触发验证时required属性改变了?

注意:我正在寻找一种仅涉及更改的解决方案MyRequiredValidator。我想避免向应用程序组件添加任何逻辑。

笨蛋:https://plnkr.co/edit/ExBdzh6nVHrcm51rQ5Fi?p=preview https://plnkr.co/edit/ExBdzh6nVHrcm51rQ5Fi?p=preview


我会使用类似的东西:

@Directive({
  selector: '[myRequired][ngControl]',
  providers: [new Provider(NG_VALIDATORS, { useExisting: forwardRef(() => MyRequiredValidator), multi: true })]
})
class MyRequiredValidator {
  @Input('myRequired') required: boolean;

  ngOnChanges() {
    // Called when required is updated
    if (this.control) {
      this.control.updateValueAndValidity();
    }
  }

  validate(control: AbstractControl): { [key: string]: any } {
    this.control = control;
    return this.required && !control.value
      ? { myRequired: true }
      : null;
  }
}

看看这个笨蛋:https://plnkr.co/edit/14jDdUj1rdzAaLEBaB9G?p=preview https://plnkr.co/edit/14jDdUj1rdzAaLEBaB9G?p=preview.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 中条件必需的验证器指令 的相关文章

  • 验证电子邮件地址是否包含“@”和“.”

    我需要验证插入的电子邮件地址是否包含 和 没有正则表达式 有人能给我 java代码 和 结构图 的例子吗 I suspect你正在追求类似的东西 if address contains address contains Handle bad
  • 参数“event”和“event”的类型不兼容

    我有一个项目 是一个员工监控项目 它有几个组件 这些组件中有一组按钮在一起 我有一组按钮 我在另一个组件中调用这些按钮 但是当我编写代码时 我遇到了这个错误 Type event React MouseEvent
  • Angular 5 - 加载视图后加载脚本

    我有一个遗留脚本 需要将其包含在我的角度应用程序中 该脚本的特点是它与特定组件相关 并且只有在加载该组件的视图之后才必须加载它 就今天而言 我成功地将它包含在 OnInit 函数中 但有时 并非总是出于某种原因 CLI 会抛出有关它的错误
  • 如何将 css 预处理器与 Angular 7 一起使用

    我是预处理器世界的新手 我如何使用它们 特别是 postcss 和 LostGrid 与 Angular 7 我正在尝试申请这段代码 https codepen io anon pen BeLWeb有角度的 正如你所看到的 它使用postc
  • JQuery 在提交之前需要复选框和单选按钮

    我很难弄清楚这一点 现在我们已经花了 3 个多小时来研究 JQuery 验证的示例和工具 我想做的只是要求选中一个复选框和一个单选按钮 但我不在乎需要哪一个
  • Typescript 中未定义的 d3.scale

    我是 Typescript 的新手 2 周 我正在从事包装 d3 js 框架的项目 我在使用 d3 d ts 命名空间 导出模块 导入时遇到问题 我的问题 当我尝试使用 d3 scale linear 时 浏览器控制台中出现错误 TypeE
  • 有没有办法在打字稿中自动生成 Azure Functions 的 swagger 文档?

    我在我的项目中使用带有 azure 函数的打字稿和节点 我想为我的项目自动生成 openAPI 定义文件 而不是手动创建一个 我看到了https www nuget org packages Aliencube AzureFunctions
  • SAP Spartacus 表单个性化

    如果已经有使用给定电子邮件注册的帐户 我需要修改注册表以显示错误消息 SAP Hybris 后端 Angular 中的 Spartacus 店面 目前 我有一个自定义验证器类 它可以正常工作 import org springframewo
  • 使用 ngrx 时调度完成后执行代码

    在我的示例 Angular 2 应用程序中 我使用 ngrx store 和 ngrx effects 进行状态管理 下面是组件中添加新项目的函数之一 addAuthor this store dispatch addAuthorActio
  • TypeORM 插入带有外键的行

    我之间有 OneToMany 关系聊天室1 M gt 留言我遇到的问题是 每当我尝试插入一条消息 或大量消息 时 ChatRoom 的外键为空 此外 我正在上传我的设置 Entity messages export class Messag
  • 在 httpInterceptor 中过滤请求 - Angular 4.3+

    我有一个身份验证拦截器 但是 我希望此拦截器能够过滤请求 并且当用户访问不需要用户身份验证的组件 例如确认帐户密码等 时不应用该拦截器 有关于如何进行的示例吗 这是 auth 拦截器的逻辑 intercept request HttpReq
  • Angular:如何检测 ng-bootstrap 下拉列表中的切换状态(其中有多个下拉列表)

    我最近问这个问题 https stackoverflow com questions 56473532 angular how to detect toggle status in ng bootstrap dropdown 5647508
  • 如何在 Angular 4 中将 xml 转换为 json?

    我是 Angular 4 的初学者 我没有足够的知识如何处理 XML 到 JSON 以及如何在 Angular 4 中调用服务 请建议 基于库http goessner net download prj jsonxml http goess
  • 构造函数上的分支未涵盖

    我正在使用 Jasmine 创建单元测试 我对所涵盖的分支有疑问 有谁知道为什么代码部分显示分支没有被覆盖 如下所示 这是单元测试 describe MyComponent gt let component MyComponent let
  • 错误:尝试扩展 tslint-microsoft-contrib 时找不到模块“tslint/lib/lint”

    这就是我们的环境 gt node modules bin tslint version 4 0 1 gt npm install save dev tslint microsoft contrib email protected cdn c
  • 不允许我将对象推入数组

    我正在使用 Angular 我试图将一个对象推入数组 但它给了我错误 它说类型错误 无法读取未定义的属性 push 也就是下面的代码 文章是一个对象 articles Article addArticle newTitle HTMLInpu
  • 在 Typescript 中创建动态变量引用

    提前感谢任何提供帮助的人 对于有经验的人来说 这似乎是一个简单的答案 但我已经浏览了互联网和几本参考书 并没有找到这个问题的直接答案 所以希望它也对其他人有帮助 我目前正在从 Actionscript 过渡到 Typescript 并且对普
  • Jquery:表单验证不起作用

    我对 Jquery 很陌生 希望你们能帮助我解决这个 jquery 验证问题 一直在尝试验证表单 但它根本没有验证 它接受我在字段中输入的任何内容 无论我设置什么限制 请帮忙 谢谢 这是我的代码
  • 当角度4中令牌过期时如何重定向到注销

    我有一个 Angular 4 应用程序 我在那里使用 JWT 令牌进行身份验证 一切正常 但我给 JWT 令牌的令牌过期时间是 1 小时 一旦服务器端的令牌过期 我想从前端应用程序中注销用户 在节点后端 我使用快速中间件通过检查所有请求是否
  • 有角材料 2 卡可滚动

    如何使mat card材质2组件内的内容可以滚动 我在材料2网站上没有找到任何内容 这不是内置功能 要使内容可滚动 请设置高度

随机推荐

  • 如何调试 cordova 混合应用程序

    因此 我在远程设备上运行了 cordova 应用程序 并且我正在尝试测试扫描仪 因此必须在 Android 设备本身上进行测试 但我不知道应该如何检查它抛出的错误 因为扫描仪在我的移动设备上无法工作 任何帮助将不胜感激 Thanks 调试
  • 如何在使用 React Native 时实现 SSL 证书固定

    我需要在我的 React Native 应用程序中实现 SSL 证书固定 我对 SSL TLS 知之甚少 更不用说固定了 我也不是本地移动开发人员 尽管我了解 Java 并在这个项目上学习了 Objective C 足以应付 我开始寻找如何
  • 如何通过用户脚本抓取 HTML 表格内容?

    我正在创建一个 Greasemonkey 脚本 该脚本读取基于文本的游戏中的信息并将其存储到数据库中以供将来使用 我想要的是能够读取用户的统计信息并将这些统计信息转换为变量 以便我可以继续使信息变得有用 这是我想从中获取统计信息的表的源代码
  • Gulp 角度单元测试指令 templateUrl

    我在互联网上阅读了很多帖子 但找不到任何有效的解决方案 我正在尝试为指令编写单元测试 并希望从模板缓存提供 html 文件 我使用 Gulp 作为构建工具 测试的 gulp 任务看起来像这样 gulp task test function
  • “其中 T :某个值”是什么意思?

    什么是where T somevalue意思是 我刚刚看到一些代码说where T Attribute 我认为这与泛型有关 但我不确定这意味着什么或它在做什么 有人知道吗 It is a 对类型参数的约束 http msdn microso
  • 当我调用数组中对象的属性时出现错误

    在打字稿代码中 我有一个包含对象的数组 当我调用 getUsers users 函数时 它会根据需要返回结果 但在控制台中我收到此错误 未捕获类型错误 无法读取未定义的属性 firstName 在 getUsers index js 20
  • Java:最简单的日期减法

    我创建了一个类 其中有两个字段需要是日期 start date and date passed 我一直在研究 java 中日期的最佳方式YYYY MM DD格式允许轻松进行日期减法 并能够 组成 日期 例如将来的日期 我想要它做什么的例子
  • R 中的向量化函数

    我在 R 中有这个数据集 看起来像这样 id sample int 10000 100000 replace TRUE res c 1 0 results sample res 100000 replace TRUE date exam t
  • SQLite DB 的 MIDP Java 实现

    是否有任何 SQLite db 的 MIDP 实现可用于在 MIDlet 中使用 sqlite db 而不是使用 RMS 当然 还有Floggy http floggy sourceforge net and OpenBaseMovil h
  • Gradle jacoco 代码覆盖率 - 然后在 Jenkins 中发布/显示

    我正在尝试为 Java 应用程序项目设置代码覆盖率 项目名称 新应用 项目结构 src java 源代码 src java test 单元测试 Junit 测试 it 测试 集成测试 测试 测试 验收测试 tomcat 包含tomcat启动
  • 在 wwwroot 之外提供静态文件,但在目录不存在时处理 PhysicalFileProvider

    我正在尝试从外部提供文件wwwroot还可以处理目录可能尚不存在的设置情况 例如 如果我构建了一个依赖于该目录的站点 但用户没有遵循安装说明并首先创建该目录 为了便于讨论 让我们假设我想要一个简单的网站 其中有一个页面可以读取该目录的内容并
  • 通过 ajax 调用 CouchDB 时得到空响应

    我是 CouchDB 的新手 所以请耐心等待 我有一个在虚拟机上运行的 CouchDB 实例 我可以通过浏览器通过蒲团或直接访问它 http 192 168 62 128 5984 articles hot dog 在浏览器中调用该 URL
  • Android 以编程方式关闭 Activity

    活动中与离开屏幕等效的操作是什么 就像当您按下后退按钮时 活动就会消失 如何从活动内部调用它以使其自行关闭 关于Activity finish http developer android com reference android app
  • java.lang.NoClassDefFoundError:com.dropbox.sync.android.DbxAccountManager

    请这不是重复的问题 不知道 但我已经将 jar 放入 libs 文件夹中 并且还完成了以下过程 And also 我已经检查过这个我收到 java lang classnotfoundException com mysql jdbc Dri
  • 可移植的比较和交换(原子操作)C/C++ 库?

    是否有任何小型库 可以将各种处理器的类似 CAS 的操作包装成可跨多个编译器移植的宏或函数 PS The 原子 hpp库 http www boost org doc libs 1 39 0 boost interprocess detai
  • MongooseError:Model.findOne() 不再接受 Function 的回调

    我在设置 mongoose 时遇到了问题 这是我的代码 const SlashCommandBuilder require discordjs builders const testSchema require Schemas js tes
  • Java 中的 Hbase CopyTable

    我想将一个 Hbase 表复制到另一个具有良好性能的位置 我想重用 CopyTable java 中的代码Hbase 服务器 github 页面 https github com apache hbase blob master hbase
  • Android 4.3 之前使用 SimpleDateFormat 的“ZZZZZ”(+03:00) 作为时区

    我在用着SimpleDateFormat有格式yyyy MM dd T HH mm ssZZZZZ 预期输出为 2014 08 26T13 00 14 03 00 但是 仅从 Android 4 3 开始支持 ZZZZZ 结果如下 以上4
  • 为使用 Electron 创建的应用程序签名 Windows 安装程序 (.exe)

    我有一个使用构建的简单应用程序电子框架 我使用以下方式打包了代码electron packager interactive 我还创建了一个Windows 安装程序文件可以使用 Inno Setup 编译器 单个 exe 文件 进行分发 这里
  • Angular 2 中条件必需的验证器指令

    我需要根据其他字段的值将某些表单字段设置为必需或不必需 内置的必需的验证器 https angular io docs ts latest api common RequiredValidator directive html指令似乎不支持