По сути, то, что я пытаюсь выполнить, - это установить фокус на первый недопустимый элемент после попытки отправки формы. На данный момент у меня есть элемент, помеченный как недопустимый, и я могу получить $name
элемента, чтобы я знал, какой это элемент.
Это "работает", но выдается ошибка "$apply уже выполняется"...
Так что я, должно быть, делаю что-то не так :)
Вот мой код:
$scope.submit = function () {
if ($scope.formName.$valid) {
// Good job.
}
else
{
var field = null,
firstError = null;
for (field in $scope.formName) {
if (field[0] != '$')
{
if (firstError === null && !$scope.formName[field].$valid) {
firstError = $scope.formName[field].$name;
}
if ($scope.formName[field].$pristine) {
$scope.formName[field].$dirty = true;
}
}
}
formName[firstError].focus();
}
}
Мое зацикливание полей основано на этом решении, и я прочитал над этим вопросом несколько раз. Кажется предпочтительным решением является создание директивы, но добавление директивы к каждому отдельному элементу формы кажется излишним.
Есть ли лучший способ приблизиться к этому с помощью директивы?