【发布时间】:2014-11-21 17:32:14
【问题描述】:
背景
我正在尝试找到一种可靠、通用的方法来将表单重置为其原始的干净状态。
angularjs 文档中有一个基本示例,这似乎被认为是清除表单的事实上的方法(我也看到在其他地方重复了同样的方法)。问题是,它不起作用,除非:
a) 所有表单字段均有效
或
b) 您预先为所有表单输入模型值定义默认值
示例
我将使用 angularjs 文档中的实际形式作为示例:
https://docs.angularjs.org/guide/forms
如果您滚动到第一个表单,填写名称字段,然后使用无效值填写电子邮件输入,您将看到(可以理解)“电子邮件”属性永远不会分配给模型。如果您然后单击“重置”按钮,您会看到名称输入被重置为空白,但电子邮件输入保持不变。
因此,您似乎无法可靠地使用此方法,因为它仅在所有字段实际有效时才完全重置表单。
可能的解决方案
一种解决方案是为每个表单预先定义一个默认模型,然后使用它来重置表单。
http://plnkr.co/edit/WCNC5keMDb8CGcvAt1Lp?p=preview
$scope.master = {
name: '',
email: ''
}
但这对我来说并不枯燥,因为您必须从标记中手动重复预定义的 ng-model 值。而且我的应用程序中也有很多表单,我不想将它添加到所有控制器中......
我想要实现的目标
除了使用$setPristine()和$setUntouched()重置表单的状态外,我还需要完全重置表单模型数据,以便所有输入都重置为原始状态。
问题
所以在我开始花时间写一个详细的、最重要的解决方案之前,我想知道我是不是只见树木不见森林,实际上有一个明显的解决方案?
【问题讨论】:
标签: angularjs