验证器与表单中的其他值相同

Validators same as other value in form

我想知道是否有一个验证器可以比较来自同一表单的两个不同值 - 假设我有以下内容:

 this.loginForm = fb.group({
      email: ["", Validators.required],
      password: ["", Validators.required],
      repeatPassword: ["", Validators.required]
  });

我在文档中找到了 this,但它不是很有用。

有什么想法吗?

您需要为一个完整的表单组分配一个验证器来实现它。类似的东西:

this.form = fb.group({
  name: ['', Validators.required],
  email: ['', Validators.required]
  matchingPassword: fb.group({
    password: ['', Validators.required],
    repeatPassword: ['', Validators.required]
  }
}, {validator: this.areEqual}));   <--------

这样您就可以访问组的所有控件,而不仅仅是一个...这可以使用组控件的 controls 属性 进行访问。触发验证时直接提供后者(不是单个)。例如:

areEqual(group: ControlGroup) {
  var valid = false;

  for (name in group.controls) {
    var val = group.controls[name].value

    (...)
  }

  if (valid) {
    return null;
  }

  return {
    areEqual: true
  };
}

有关详细信息,请参阅此问题:

  • Angular2 validator which relies on multiple form fields