javascript - 自定义验证不禁用表单提交按钮 - Angular 5

标签 javascript angular typescript angular-reactive-forms

我已经以如下 Angular 创建了响应式(Reactive)表单,我的问题是,如果密码不匹配,我想禁用表单提交按钮。

表单提交按钮代码

<button [disabled]="changePasswordForm.invalid">Change password</button>

响应式(Reactive)表单代码

this.changePasswordForm = this.fb.group({
     oldPassword: ['', [Validators.required, Validators.minLength(10)]],
     newPassword: ['', [Validators.required, Validators.minLength(10)]],
     newConfirmPassword: ['', [Validators.required, Validators.minLength(10)]]
}, {
     validator: this.passwordMatchValidator
});

密码验证器代码

passwordMatchValidator(AC: AbstractControl) {
    let newPassword = AC.get('newPassword').value;
    let newConfirmPassword = AC.get('newConfirmPassword').value;
    if (newPassword !== newConfirmPassword) {
      console.log("Passwords doesn't match.");
    } else {
      console.log("Passwords matched.");          
    }
 }

在用户输入最小长度为 10 个字符的密码之前,表单的提交按钮不会启用。但即使密码不匹配,表单按钮也会被启用。我在这里缺少什么逻辑?

感谢您的帮助。

最佳答案

您的签名是passwordMatchValidator(AC: AbstractControl),但您似乎将验证器绑定(bind)到您的表单。

否则,您不会从验证器返回任何内容,您希望它如何验证?尝试这个。

passwordMatchValidator(AC: AbstractControl) {
  let newPassword = AC.get('newPassword').value;
  let newConfirmPassword = AC.get('newConfirmPassword').value;
  return { passwordMismatch: newPassword !== newConfirmPassword };
}

关于javascript - 自定义验证不禁用表单提交按钮 - Angular 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753400/

相关文章:

javascript - Firebase 未与 React 应用程序连接 - 权限被拒绝 - 在线检查了所有关于此无解决方案的问题

javascript - 服务更新时 Angular 组件未更新

caching - 从 TypeScript 文件中收集引用依赖树

javascript - 在 Typescript 中创建动态变量引用

javascript - 从 php 中获取 () json

javascript - document.addEventListener 减慢加载速度

javascript - 遍历列表并插入对象数组

javascript - 如何在 ionic 4 中移动搜索栏右侧搜索栏的搜索图标

angular2 *ngfor 和嵌套可观察

javascript - Angular2/Rxjs 嵌套映射,条件在 guard 中