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