5

tôi đã xác nhận điều này:góc 2 validator không làm việc như mong đợi

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 
    }); 
    }; 
}; 

nào được sử dụng theo hình thức này:

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

Một phần của mẫu trong đó sử dụng nó:

<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> 

Vấn đề là ngay cả khi mật khẩu khớp, nó vẫn hiển thị lỗi. Tôi đã xem xét một số câu hỏi tương tự khác nhau nhưng hầu hết các em có chút lộn xộn và lỗi thời vì vậy tôi muốn viết một giải pháp sạch hơn.

Tôi đoán chỉ có một điều chỉnh nhỏ cần thiết nhưng tôi dường như không thể tìm ra.

Trả lời

4

thử điều này, bởi vì bạn cần so sánh giá trị 2 và validator không phải là async validator, bạn có thể trở lại chỉ boolean thay vì Quan sát

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 
    }; 
    }; 
}; 

btw, sử dụng phương pháp này cho thực hành tốt nhất:

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 
    }; 
    }; 
}; 

bản demo tại đây: http://plnkr.co/edit/9PzGSIuBhvNz0fpJxTlS?p=preview

+0

Bắt tốt, nhưng nó cũng cho biết "Trình xác thực dự kiến ​​sẽ trả lại lời hứa hoặc có thể quan sát" .. Không chắc khi nào bắt đầu xảy ra hmm .. – Chrillewoodz

+0

xin lỗi, tôi không đọc cẩn thận câu hỏi của bạn, xin hãy xem câu trả lời cập nhật của tôi –

+0

Điều này thật kỳ lạ .. Tôi đang sử dụng cùng một mã chính xác như trong plunkr nhưng lỗi vẫn ném, không có ý nghĩa gì cả. .. – Chrillewoodz

Các vấn đề liên quan