5

मैं इस सत्यापनकर्ता मिला:कोणीय 2 सत्यापनकर्ता काम नहीं कर के रूप में उम्मीद

export const PasswordsEqualValidator =(): ValidatorFn => { 

    return (group: FormGroup): Observable<{[key: string]: boolean}> => { 

    const passwordCtrl: FormControl = <FormControl>group.controls.password; 
    const passwordAgainCtrl: FormControl = <FormControl>group.controls.passwordAgain; 

    const valid = passwordCtrl.value.password === passwordAgainCtrl.value.passwordAgain; 

    return Observable.of(valid ? null : { 
     passwordsEqual: true 
    }); 
    }; 
}; 

कौन इस रूप में प्रयोग किया जाता है:

public signupForm: FormGroup = this.fb.group({ 
    email: ['', Validators.required], 
    passwords: this.fb.group({ 
     password: ['', Validators.required], 
     passwordAgain: ['', Validators.required] 
    }, {validator: CustomValidators.passwordsEqual()}) 
    }); 

टेम्पलेट का एक हिस्सा है जो इसे का उपयोग करता है:

<div formGroupName="passwords"> 
    <div class="form-control" [ngClass]="{error: !signupForm.get('passwords').valid}"> 
    <label class="label" for="password">Password</label> 
    <input class="input" id="password" formControlName="password" type="password"> 
    </div> 
    <div class="form-control" [ngClass]="{error: !signupForm.get('passwords').valid}"> 
    <label class="label" for="password-again">Password again</label> 
    <input class="input" id="password-again" formControlName="passwordAgain" type="password"> 
    </div> 
</div> 

समस्या यह है कि जब भी पासवर्ड मेल खाता है, तब भी यह त्रुटि दिखाता है। मैंने कई अलग-अलग प्रश्नों को देखा है, लेकिन अधिकांश में से कुछ थोड़ा उलझन में हैं और पुराने हैं इसलिए मैं एक क्लीनर समाधान लिखना चाहता था।

मुझे लगता है कि बस एक छोटा समायोजन आवश्यक है लेकिन मुझे लगता है कि यह इसे समझ में नहीं आता है।

उत्तर

4

यह कोशिश है, क्योंकि आप 2 मूल्य की तुलना की जरूरत है और सत्यापनकर्ता async सत्यापनकर्ता नहीं है, आप केवल btw नमूदार

export const PasswordsEqualValidator =(): ValidatorFn => { 

    return (group: FormGroup): boolean => { 

    const passwordCtrl: FormControl = <FormControl>group.controls.password; 
    const passwordAgainCtrl: FormControl = <FormControl>group.controls.passwordAgain; 

    const valid = passwordCtrl.value === passwordAgainCtrl.value; 

    return valid ? null : { 
     passwordsEqual: true 
    }; 
    }; 
}; 

के बजाय बूलियन लौटा सकता है, सबसे अच्छा अभ्यास के लिए इस पद्धति का उपयोग:

export const PasswordsEqualValidator =(): ValidatorFn => { 

    return (group: FormGroup): boolean => { 

    const passwordCtrl: FormControl = group.get('password'); 
    const passwordAgainCtrl: FormControl = group.get('passwordAgain'); 

    const valid = passwordCtrl.value === passwordAgainCtrl.value; 

    return valid ? null : { 
     passwordsEqual: true 
    }; 
    }; 
}; 
यहाँ

डेमो: http://plnkr.co/edit/9PzGSIuBhvNz0fpJxTlS?p=preview

+0

अच्छा पकड़ है, लेकिन यह भी .. सुनिश्चित नहीं हैं कि कह रहा है "अपेक्षित सत्यापनकर्ता वादा या प्रत्यक्ष वापस जाने के लिए।" जब कि हम्म तो होना ही शुरू कर दिया .. – Chrillewoodz

+0

क्षमा करें, मैं आपके प्रश्न को सावधानीपूर्वक नहीं पढ़ता, कृपया मेरा अद्यतन उत्तर देखें –

+0

यह बहुत अजीब है .. मैं प्लंबर में एक ही सटीक कोड का उपयोग कर रहा हूं लेकिन त्रुटि अभी भी फेंकता है, कोई समझ नहीं आता है। .. – Chrillewoodz

संबंधित मुद्दे