0

我已经创建了我要检查密码确认它是否是有效的自定义验证属性:自定义的验证无法看到反应形式

static cannotContainSpace(control: AbstractControl) : ValidationErrors | null{ 
    console.log('----- control', control.get('password')); 
    console.log('----- control', control.get('passwordConfirmation')); 
    if((control.value as string).indexOf(' ') >= 0){ 
     return {cannotContainSpace : true} 
    } 
     return null; 
    } 

你能告诉我,为什么在那些控制台日志,我得到所有的时间都是空值?我的形式是通过建立和reactive form看起来像:

form = new FormGroup({ 
    login: new FormControl('', [Validators.required, Validators.email]), 
    password: new FormControl('', 
     [ 
     Validators.required, 
     Validators.minLength(3), 
     PasswordValidators.cannotContainSpace 
     ]), 
    passwordConfirmation: new FormControl('', [Validators.required]) 
    }); 

enter image description here

+0

但不是你的验证工作,虽然? – amal

+0

它的工作原理,因为在控制台我得到这个陈述'----控制',但后面是'空' – bielas

+0

@amal看到更新 – bielas

回答

0

因为您已经有密码控制。所以没有一点在寻找control.get()。如果您使用control.value,您将看到password控件的当前值。并且passwordConfirmation没有值,因为验证器未在该控件下注册。

+0

好吧我已经将密码验证程序添加到passwordConfirmation字段,仍然不能正常工作 – bielas

+0

您能否显示您的更新码?如果您仍在使用control.get(),则可能无法正常工作。尝试看看你刚刚获得的只是console.log(控制)并从那里开始。 – amal

0

我本地化错误 - 它应该看起来像:

form = new FormGroup({ 
    login: new FormControl('', [Validators.required, Validators.email]), 
    password: new FormControl('', 
     [ 
     Validators.required, 
     Validators.minLength(3), 
     PasswordValidators.cannotContainSpace 
     ]), 
    passwordConfirmation: new FormControl('', [Validators.required]) 
    }, PasswordValidators.cannotContainSpace); 

我们需要一般添加validator的形式,不给excatly一个FormControl

+0

好吧,所以你想做自定义验证涉及多个控件,是这个想法?此外,这是否解决了你的问题? – amal

+0

是的,它解决了我的问题:) – bielas

+0

好吧,没有得到这是你从你发布问题的方式寻找。我之前回答过类似的问题。希望[this](https://stackoverflow.com/a/46183057/5260710)有所帮助。 – amal