【发布时间】:2013-12-27 00:00:48
【问题描述】:
我有一个 AngularJS 表单,其中包含 url 类型之一。后者很重要,因为这会强制相应的输入成为有效的 URL。
在某些条件下(例如,要关闭带有此类表单的模态对话框),我想以编程方式清除该表单。为此,我实现了方法reset,它基本上通过设置$scope.formData = {}来清除相应的表单模型。因此,它将表单模型设置为一个新的空白对象。
虽然该分配会清除呈现的 HTML 表单中的所有 有效 字段,但它会不清除 invalid 字段,例如无效的 URL。例如,如果用户提供无效输入 ht://t/p 作为 URL,则不会从呈现的表单中删除该输入。
我认为这是因为任何无效的 URL 都没有被模型反映——这样一个无效的 URL 不会“使”它进入模型,因为它没有通过 NgModelController#$parsers 数组中的验证。因此,在模型中 - 根本没有 URL。因此,将表单模型重置为 {} 实际上无法更改模型的 URL,因为它尚未设置。
但是,如果方法reset 显式设置字段$scope.formData.url = "",无效的URL 将被正确清除(至少,呈现的表单不会再显示它)。这是由模型中 URL 的 显式 更改引起的。但是,现在,模型变量 formData.url 包含空字符串(嗯,这并不奇怪),而使用 = {},所有字段都将改为 undefined。
虽然将单个字段分配给 "" 可以作为简单表单的解决方法,但对于具有许多字段的更复杂表单来说,它很快就会变得很麻烦。
因此,我如何以编程方式有效地重置表单 - 包括所有无效的输入字段?
我在http://plnkr.co/c2Yhzs 创建了一个 Plunker,您可以在其中检查并运行一个显示上述效果的完整示例。
【问题讨论】:
-
“干净”表单的概念意味着在调用某些操作之后 - 将表单返回到初始状态(也就是在页面重新加载之后)。在你的情况下
$scope.formData = {} -
@MaximShoustin 我想重置模型和视图。使用
$scope.formData = {},仅重置模型。 -
这方面有什么进展吗?也咬我。
-
关于如何解决这个问题的任何消息?我也面临无效字段的同样问题。
标签: javascript forms validation angularjs