【发布时间】:2015-08-26 01:01:33
【问题描述】:
当我提交表单时,我希望某些输入元素是 $setPristine。因为在我提交表单后,我会清空绑定到输入元素的模型,以防用户完全可以再次输入新的东西。但是一旦我清空模型,输入元素也会清空,因此验证信息将显示为required。
所以我在提交表单后想要 $setPristine。我想出了两种方法:
一个:
我在ng-submit中使用表达式,比如:
<form ng-controller="FormController" name="userForm" ng-submit="userForm.$valid?submitForm(),userForm.keywordsInput.$setPristine(): ''">
但是这种语法似乎是错误的,因为控制台中的角度报告错误信息。
两个
我可以将表单传递给提交函数,然后在提交函数中传递 $setPristine :
$scope.submit = function (form) {
form.keywordsInput.$setPristine()
}
但我也不认为这是一个好习惯,因为在 angular 官方参考站点中,它建议:
不要使用控制器来:操作 DOM。
这种方式是不是一种操纵 DOM 的方式?
那么有没有更好的方法来完成这项工作?
【问题讨论】:
-
设置 pristine 不是在操作 dom,而是在适当地更新数据模型。你的表单标签有
name吗?你在使用controllerAs语法吗?如果命名正确,即使没有在函数中传递该名称,该名称也已在控制器中可用 -
@charlietfl,是的,表单有自己的名称和控制器,我只是忽略了它们,现在我将它们编辑回来
-
所以在控制器内部你已经有
$scope.userForm。我个人会从视图中删除命令。内部提交功能可以使用$scope.userForm.$setPristine()重置整个表单
标签: javascript angularjs forms