#angular #forms
#angular #формы
Вопрос:
Я пытаюсь добавить форму на страницу компонента, и я хочу добавить некоторый контроль над форматом даты, который должен выполняться, когда пользователь нажимает на submit
кнопку. Я использую ReactiveFormsModule
.
Но следующий код ничего не делает. Он компилируется, но форма все равно отправляется, даже если формат даты не соответствует регулярному выражению в его FormControl.
Что я пропустил?
Пожалуйста, обратите внимание, что я новичок в Angular, и это моя первая форма.
Шаблон:
<form [formGroup]="formulaireRechercheDeCohorte" (ngSubmit)="rechercheCohorte()">
<label for="jour-debut-cohorte" class="sr-only">Jour du début</label>
<input type="text" class="form-control" id="jour-debut-cohorte"
name="periodeDebut"
[(ngModel)]="criteresRechercheCohorte.datePeriodeDebut"
formControlName="controleurDateDebutPeriode" />
<button type="submit" class="btn btn-primary">Rechercher</button>
</form>
Контроллер:
formulaireRechercheDeCohorte: FormGroup;
controleurDateDebutPeriode: FormControl;
constructor() {
this.controleurDateDebutPeriode = new FormControl(Validators.pattern(/^d{1,2}.d{1,2}.d{4}$/));
this.formulaireRechercheDeCohorte = new FormGroup({
"controleurDateDebutPeriode" : this.controleurDateDebutPeriode
});
}
rechercheCohorte() {
...call to http service
}
Комментарии:
1. Не могли бы вы быть достаточно любезны, чтобы опубликовать строковую версию формата даты, который вы хотите, в сравнении с тем, что вы получаете? Я не знаком с регулярными выражениями. Тем не менее, я хотел бы помочь вам, если смогу.
2. Если вы используете FormGroup -ReactiveForm НЕ используйте [(ngModel)] . новый FormControl(..) — это новый FormControl(значение, валидаторы), — вам даются валидаторы в качестве значения-
3. Но как я могу привязать <input> к модели, если я не использую ngModel?
4. @fruustyl3r, используя formControlName, как вы пишете, но удалите [(ngModel)] . Если вы хотите присвоить значение FormControl, вы можете использовать new FormControl(«your-value», …) . Я думаю, что в официальных документах angular.io/guide/reactive-forms#reactive-forms хорошо бы объяснить:(
5. Спасибо за вашу помощь, теперь я сохраню ссылку на официальные документы в своих избранных 🙂
Ответ №1:
Посмотрите на этот рабочий StackBlitz вашего примера
Вам нужно обновить свой FormControl
, чтобы включить значение, подобное этому this.controleurDateDebutPeriode = new FormControl('' , Validators.pattern(/^d{1,2}.d{1,2}.d{4}$/));
Также вы можете добавить disabled
атрибут к своей кнопке отправки, чтобы пользователь в первую очередь не отправлял недопустимую форму вот так.
<button type="submit" [disabled]="!formulaireRechercheDeCohorte.valid" lass="btn btn-primary">Rechercher</button>
Комментарии:
1. Большое вам спасибо, я смог добавить свой элемент управления. У меня есть дополнительный вопрос: возможно ли выполнить проверку формы только при отправке без добавления логического значения типа «formIsSubmitted»?