1

同じフォームの2つの異なる値を比較するバリデーターがあるかどうか疑問に思っています-次があるとしましょう:

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

このようにして、1 つだけでなく、グループのすべてのコントロールにアクセスできます。これ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 に答える