【问题标题】:AngularJS: How can I $setPristine after submit the formAngularJS:提交表单后我如何 $setPristine
【发布时间】: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


【解决方案1】:

我在记录未定义的 $setPristine() 时遇到了同样的问题。但是,在视图中它是有效的。

<button class="button button-stable button-block " type="submit" ng-click="register(registerData);formName.$setPristine();"> Submit </button>

【讨论】:

    【解决方案2】:

    当你提交表单时,你必须在“ng-click”属性中设置一些函数来运行

    添加 formName.$setPristine();之后

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 2016-07-12
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多