Как правильно очистить форму с неверным вводом из контроллера 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 где вы можете изучить и запустить полный пример, показывающий вышеуказанный эффект.