[Angular2 Form] Check password match

Learn how to create a custom validator to check whether passwords match.

<h1>password match</h1>
<form novalidate autocomplete="off" [formGroup]="signupForm">
  <div class="form-field">
    <label>Password:</label>
    <input type="text" formControlName="password" [(ngModel)]="signup.password" name="password">
  </div>
  <div class="form-field">
    <label>Confirm Password: </label>
    <input type="text" formControlName="confirm" [(ngModel)]="signup.confirm" name="confrim"></div>
</form>
    this.signupForm = fb.group({
      password: [
        '',
        Validators.required
      ],
      confirm: [
        '',
        [
          Validators.required,
          confirmPasswords.bind(undefined, this.signup)
        ]
      ]
    });

confirmPasword validator is just a function, also a curry function. So it means it will be invoked when we pass the value 'confirm' password field. 

So if we want to send extra params, we can use '.bind(undefined, extraParam)'.

bind to undefined context, will keep the context when it get invoked, then send a extraParam

The extraParam will be 'passwords' and the value later be passed in is 'confirm'.

confirmPassword.ts:

export function confirmPasswords(passwords, confirm) {
  const valid = passwords.password&& passwords.password === confirm.value;
  return valid ? null : {
    confirmPassword: {
      valid: false,
      message: "Two passwrods are not the same"
    }
  };
}
原文地址:https://www.cnblogs.com/Answer1215/p/6012367.html