1

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

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

我在文档中找到了这个,但是它不是很有帮助。

有任何想法吗?

4

1 回答 1

3

您需要将一个验证器分配给一个完整的表单组来实现这一点。像这样的东西:

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
  };
}

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

于 2016-03-17T15:10:14.937 回答