【问题标题】:Angular 6: Custom validators not executingAngular 6:自定义验证器未执行
【发布时间】:2018-07-30 15:26:15
【问题描述】:

我已经为此奋斗了 2 天。我只是不知道出了什么问题。似乎我的自定义验证器没有执行。

如果您只按“下一步”按钮,每个控件都会以红色边框突出显示。如果您填写表格,请在电子邮件字段中键入不同的值并按“下一步”,表格有效,我没有从自定义电子邮件验证器中看到任何 console.log。

https://stackblitz.com/edit/angular-nwhgpb

【问题讨论】:

  • 对不起...这是我的第一个堆栈闪电战,我不知道如何正确添加它...也许有人可以启发我...。
  • 有人告诉我,我在哪里可以看到代码?
  • 我编辑了stackblitz的url...这个应该是编辑器的url。
  • 电子邮件使用input type="email"
  • 感谢@ChatarSIngh ... 已修复 :-)

标签: angular angular-forms angular-validation


【解决方案1】:

(如果你想执行密码验证器,你需要在验证器函数示例中添加'()' password1: new FormControl("",[Validators.required,this.passwordValidator()]), 甚至 虽然它会抛出错误,因为您在里面使用了 FormGroup 不会有对 formData 密码 1 和密码 2 的引用)

如果你想比较两个输入字段,你需要在 formGroup 中使用 formGroup,因为如果你不使用 formGroup 作为 formGroup 将不会保存这样的对象。

value: Object
email1: "data"
email2: ""
__proto__: Object

https://angular.io/guide/form-validation#custom-validators 使用此 Ref 来实现 ComparePassword 和电子邮件

/** A hero's name can't match the given regular expression */
export function forbiddenNameValidator(nameRe: RegExp): ValidatorFn {
  return (control: AbstractControl): {[key: string]: any} | null => {
    const forbidden = nameRe.test(control.value);
    return forbidden ? {'forbiddenName': {value: control.value}} : null;
  }; 

【讨论】:

  • 谢谢!你引导我走上正确的道路:-D ...我已经编辑了我的 stackblitz 代码,它就像一个魅力。我是否应该在我的问题中包含最终解决方案...这是一种好的做法吗?
  • @Chellappan 拯救了我的一天
  • 我总是忘记这一点,每次都杀了两个小时
【解决方案2】:

在您的输入字段中使用type="email" 而不是type="text",除非formgroup 对象不知道字段值是否有效。

检查:https://stackblitz.com/edit/angular-eol5eq?file=src/app/app.component.html

【讨论】:

  • 这不起作用,尝试电子邮件:a@a 并重复电子邮件:ab@a -> 数据有效。
  • 您可能误解了我的评论。我修复了电子邮件类型,但这并不能解决问题。电子邮件和密码验证器仍未执行...
猜你喜欢
  • 2019-02-11
  • 2019-01-07
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2018-01-26
相关资源
最近更新 更多