Мой ответ вдохновлен yurzui ответом здесь.Я использую логику из его ответа, чтобы получить nativeElement
определенного FormControl
, используя его FormControl
.
Это логика, которая делает это:
const originFormControlNameNgOnChanges = FormControlName.prototype.ngOnChanges;
FormControlName.prototype.ngOnChanges = function () {
const result = originFormControlNameNgOnChanges.apply(this, arguments);
this.control.nativeElement = this.valueAccessor._elementRef.nativeElement;
return result;
};
Теперь поле ошибок формы будет нулевым, даже если его поля недействительны.Таким образом, чтобы получить точное первое поле, которое является недействительным, мы должны пройти через все поля и проверить правильность каждого из них.Я могу написать эту логику в методе onSubmitForm()
.Примерно так:
onSubmitForm() {
const fieldsToCheck = [
'codeBasicat',
'libellePef',
'nomApplication'
];
for (let i = 0; i < fieldsToCheck.length; i++) {
const fieldName = fieldsToCheck[i];
if (this.addItemfForm.get(fieldName).invalid) {
( < any > this.addItemfForm.get(fieldName)).nativeElement.focus();
break;
}
}
}
Я намеренно использовал for
вместо Array.forEach
, так как хотел вырваться из цикла.
Надеюсь, это поможет вам.
Вот Рабочий образец StackBlitz для вашей ссылки.