Почему недействительная форма действительна сначала и сразу после того, как оказывается недействительной?

Чтобы упростить вещи, я составил образец формы для описания моего вопроса:

<form novalidate name="form">
  <input required name="foo" ng-model="my.foo">
</form>

А также контроллер:

angular.module('sample', []).controller('MainController', function($scope) {
  $scope.$watch('form.$valid', function (valid) {
    console.log(valid);
  });
});

Ожидаемый результат:

> false

Фактический результат:

> true
> false

Кто-нибудь может мне сказать, почему сначала форма действительна, а потом становится недействительной (кстати, какой она должна быть)?

Рабочая демонстрация

1 ответ

Решение

Я на самом деле уверен, что это связано с приоритетом директив.

В угловых <form> на самом деле директива. required это еще один.

Пусть supose у нас есть форма без проверки. Форма всегда действительна. Я уверен, что теперь мы можем сказать, что форма действительна по умолчанию.

Директива "form" имеет более высокий приоритет, чем "required". Это означает, что в определенный момент. Angular применяет директиву "form", а не "обязательную". Этот результат в правильной форме с вводом с неизвестным атрибутом "требуется". В следующем дайджесте будет проанализирована директива "required". Он обнаружил, что ввод пуст и установил допустимое значение false.

Как сказал Омри, речь идет о цикле приоритетов и дайджестов.

Другие вопросы по тегам