在Angular中动态重置ng形式



我已经看了以下内容:AngularJS中的Reset Form和Angular clear子表单数据以及从中重置验证。我正在尝试创建一个动态表单重置/清除函数,它看起来像以下内容:

$scope.clearSection = function(formName){
    $scope.formName.$setPristine();
    $scope.formName.$setUntouched();
};

有可能在angular中创建这样一个动态清除函数吗?其中表单名称被动态传递给该函数?

示例plunkr:http://plnkr.co/edit/lnGym0vKsANL6oks30RG

$scope.resetForm = function(formName) {
  var form = $scope[formName];
  form.$setUntouched();
  form.$setPristine();
}

注意:您仍然需要重置输入值!

根据文件:

https://docs.angularjs.org/api/ng/type/form.FormController

$setPristine()将窗体设置为其原始状态。

可以调用此方法来删除"ng dirty"类,并设置形成其原始状态(ng原始类)。此方法还将传播到此表单中包含的所有控件。

当我们需要时,将表单设置回原始状态通常很有用保存或重置表单后"重新使用"表单。

$setUntouched();将窗体设置为未受影响的状态。

可以调用此方法来移除"ng touch"类,并设置将控件形式设置为其未触及状态(ng未触及类)。

将窗体控件设置回未受影响的状态通常很有用当将表单设置回其原始状态时。

$setPristine和$setUntouched只更改窗体控件的类,而不更改值。这意味着您仍然需要重置这些值。

我不明白为什么不。

$scope.clearSection = function(formName){
    var frm = $scope[formName];
    frm.$setPristine();
    frm.$setUntouched();
};

是的。

在JavaScript中,您可以使用[]表示法访问对象的变量。以为例

var str = 'hello';
var obj = { hello: 'a' };
console.info(obj[str]); // outputs 'a'

因此,如果formName是一个字符串,您可以简单地使用获取作用域的属性

var form = $scope[formName]

最新更新