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

时间:2016-03-17 15:08:57

标签: angular angular2-forms angular2-formbuilder

我想知道是否有一个Validator比较来自同一表单的两个不同的值 - 让我说我有以下内容:

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

我在文档中找到了this,但它并没有帮助。

有什么想法吗?

1 个答案:

答案 0 :(得分: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
  };
}

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