У меня есть форму 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
вместо этого.
При назначении отдельных полей ""
работает как обход для простых форм, он быстро становится громоздким для более сложных форм со многими полями.
Таким образом, как я мог программно reset форма эффективно и эффективно - включая все недопустимые поля ввода?
Я создал Plunker в http://plnkr.co/c2Yhzs, где вы можете изучить и запустить полный пример, демонстрирующий вышеупомянутый эффект.