2012-10-17 119 views
1

我尝试使用验证制作嵌套表单。所有的工作都很好,但是当我删除一个嵌套表单时,验证会继续使用已删除的表单。我做了jsfiddle示例http://jsfiddle.net/sokolov_stas/VAyXu/验证动态创建表单(AngularJS)

当示例运行时,表单有效。如果点击“+”按钮,嵌套表格将被添加,并且有效将是错误的。然后点击“ - ”按钮,有效将是假的。

问题是:如何从验证处理中删除动态创建的表单。

回答

0

那么,首先,一个<form> inside of a <form> is not valid HTML

其次,你不应该从控制器内部进行DOM操作。控制器用于“业务”逻辑。 See the section on controllers here

对于你在做什么,你可能会更好使用一种形式,它里面的NG-重复,并增加额外的元素添加到数组:

<form name="myForm" ng-controller="FormCtrl" ng-submit="doSomething()"> 
    <div ng-repeat="item in items"> 
     <input ng-model="item" type="text" required/> 
    </div> 
    <a ng-click="addItem()">+</a> 
    <a ng-click="removeItem()">-</a> 
    <button type="submit">Submit</button> 
    <div>Form valid: {{myForm.$valid}}</div> 
</form> 

和控制器:

function FormCtrl($scope) { 
    $scope.items = []; 
    $scope.addItem = function() { 
     $scope.items.push(null); 
    }; 
    $scope.removeItem = function() { 
     $scope.items.pop(); 
    }; 
    $scope.doSomething = function() { 
     //your submission stuff goes here. 
    }; 
} 
+0

这只是一个例子。在现实世界中,我有一个大规模的应用程序。通过ng-repeat添加形式的表单。我必须将表格移动到主表单之外。现在,我在移动平台上有了一个很好的逻辑,例如视图堆栈。所有这些都是因为必须编辑主项目中包含的项目(编辑FK链接行)。 – ximage