Я пытаюсь проверить свою форму в угловом режиме с использованием реактивной формы. Несколько полей - пример card name
в котором пользователь вводит только string
поэтому он пытается ввести что-либо другое, кроме строки. Мне нужно показать недопустимое сообщение. Я так пробовал
https://codesandbox.io/s/jzq6nn6zz9
constructor(private fb: FormBuilder) {
this.paymentForm = this.fb.group({
cardname: [
"",
[(Validators.required, Validators.pattern("[a-zA-Z][a-zA-Z ]+"))]
],
cardnumber: [""],
dateofexipiredate: [""],
dateofexipireyear: [""],
cvc: [""]
});
}
когда я запускаю свое application
моя форма уже действительна почему?
он должен действовать только тогда, когда пользователь enter string
Удалите дополнительные скобки ()
в массиве Validators
. Validators
должны быть отправлены как массив. После добавления ()
они обрабатываются как один элемент, который дает ложные результаты.
this.paymentForm = this.fb.group({
cardname: [
"",
[Validators.required, Validators.pattern("[a-zA-Z][a-zA-Z ]+")] // see this line
],
a
any charter
.after завязывания второго персонажа это показать действительным
Validators.pattern("[a-zA-Z][a-zA-Z ]+")
которой требуется минимум 2 символа
Просто добавьте Validators.minLength(1)
чтобы он ввел хотя бы один символ и Validators.pattern("[a-zA-Z][a-zA-Z ]+")
проверит, вводит ли он действительное имя
constructor(private fb: FormBuilder) {
this.paymentForm = this.fb.group({
cardname: [
"",
[Validators.required, Validators.pattern("[a-zA-Z][a-zA-Z ]+"),Validators.minLength(1)]
],
cardnumber: [""],
dateofexipiredate: [""],
dateofexipireyear: [""],
cvc: [""]
});
}
Вы можете использовать проверку ошибок formGroup, чтобы убедиться, что она работает правильно. yourForm.get('cardname').hasError('required')
Вы также можете проверить добавление дополнительного HTML-кода в свой HTML- yourForm.get('cardname').hasError('required')
который будет отображаться, когда пользователь делает что-то неправильно в режиме реального времени. Здесь пример с проверкой, требуется ли элемент:
<div *ngIf="yourFormGrup.get('cardname').hasError('required')">Card name is required.</div>
Он будет виден только тогда, когда ваша группа форм содержит указанную ошибку. Вот вам дополнительное чтение, которое поможет вам.
Напишите 1 пользовательский валидатор для этой задачи. Я добавил 1 образец здесь, просто измените свое состояние в валидаторе.
import { AbstractControl } from '@angular/forms';
export function SameEmail(control: AbstractControl) {
let email = window.localStorage.getItem("user");
if (control.value == email) {
return { validEmail : true };
} else {
return null;
}
}
this.customForm = this.formBuilder.group({
'email': new FormControl(this.customForm.email, [
Validators.required,
SameEmail
])
});
<div *ngIf="form.email.invalid && (form.email.dirty || form.email.touched)" class="alert alert-danger">
<div *ngIf="form.email.errors.required">
Error 1
</div>
<div *ngIf="form.email.errors.validEmail">
Error 2
</div>
</div>