在Angular中动态重置ng-form

时间:2015-11-12 08:13:37

标签: javascript angularjs

我已经看过以下内容:Reset Form in AngularJSAngular clear subform data and reset validation,我试图创建一个动态表单重置/清除功能,如下所示:

$scope.clearSection = function(formName){

    $scope.formName.$setPristine();
    $scope.formName.$setUntouched();
};

是否可以在角度中创建一个动态清除函数,其中表单名称动态传递给此函数?

3 个答案:

答案 0 :(得分:5)

示例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();   将表单设置为其原始状态。

     

可以调用此方法来删除&#39; ng-dirty&#39;上课并设置   形成其原始状态(ng-pristine类)。这种方法也会   传播到此表单中包含的所有控件。

     

在我们需要时,将表单设置回原始状态通常很有用   重用&#39;保存或重置后的表单。

     

<强> $ setUntouched();将表单设置为未触摸状态。

     

可以调用此方法来删除“触摸”&#39;上课并设置   将控制形式控制到未触及的状态(ng-untouched class)。

     

将表单控件设置回其未触摸状态通常很有用   将表格设置回原始状态时。

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

答案 1 :(得分:3)

我不明白为什么不。

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

答案 2 :(得分:1)

是的。

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

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

因此,如果formName是一个字符串,您可以使用

简单地获取范围的属性
var form = $scope[formName]