【问题标题】:Custom validation not disabling the form submit button - angular 5自定义验证不禁用表单提交按钮 - 角度 5
【发布时间】:2018-04-10 20:21:07
【问题描述】:

我已经创建了如下角度的反应式表单,我的问题是如果密码不匹配,我想禁用表单提交按钮。

表单提交按钮代码

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

反应式表单代码

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 个字符的密码之前,表单的提交按钮不会被启用。但即使密码不匹配,表单按钮也会启用。我在这里缺少什么逻辑?

感谢您的帮助。

【问题讨论】:

    标签: javascript angular typescript angular-reactive-forms


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨 trichetriche,你是对的,因为我没有返回密码匹配状态,表单提交按钮正在启用。谢谢你。您的解决方案有效。
    • 没问题,请务必将您的问题标记为已解决!
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多