Как правильно очистить форму с неверным вводом из контроллера AngularJS?

У меня есть форма AngularJS, которая содержит - среди других полей - один из типаurl, Последнее важно, так как это заставляет соответствующий ввод быть действительным URL.

При определенных условиях (например, модальный диалог с такой формой должен быть закрыт), я хочу очистить эту форму программно. Для этого я реализовал методreset который в основном очищает соответствующую модель формы путем установки$scope.formData = {}, Таким образом, он устанавливает модель формы в новый пустой объект.

Пока это назначение очищает вседействительный поля в представленной форме HTML, это делаетне Чистонедействительным поля, как недействительный URL. Например, если пользователь предоставит неверный вводht://t/p как URL, этот ввод не будет удален из отображаемой формы.

Я думаю, что это связано с тем, что модель не отображает ни один неверный URL - такой неверный URL просто не будет "делать" это к модели, потому что он не проходит проверку вNgModelController#$parsers массив. Таким образом, в модели - нет URL вообще. Следовательно, сброс модели формы на{} не может на самом делеменять модель'URL-адрес, поскольку он еще не был установлен.

Однако, если методreset явно устанавливает поле$scope.formData.url = ""неверный URL будет очищен должным образом (по крайней мере, обработанная форма победила 'больше не показывать) Это вызваноявный изменение URL в модели. Однако теперь переменная моделиformData.url содержит пустую строку (ну, не удивительно), в то время как с помощью= {}все поля будутundefined вместо.

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

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

Я создал Plunker вhttp://plnkr.co/c2Yhzs где вы можете изучить и запустить полный пример, показывающий вышеуказанный эффект.

Ответы на вопрос(7)

Ваш ответ на вопрос