我有一个使用角度的验证表单。我想使用动态textarea名称验证ng-repeat
中的表单。看看我的代码:
<div ng-repeat="comment in comments track by $index">
<form name="main.adminArticleReplyForm" novalidate>
<div ng-class="{'has-success':(main.adminArticleReplyForm.commentReply_{{$index}}.$valid), 'has-error':(!main.adminArticleReplyForm.commentReply_{{$index}}.$valid)}">
<textarea name="commentReply_{{$index}}" ng-model="main.commentReply[$index]" required></textarea>
<ul ng-show="(!main.adminArticleReplyForm.commentReply_{{comment.number}}.$pristine && main.adminArticleReplyForm.$error.minlength[0].$viewValue.length)">
<li>You have to add {{10 - main.adminArticleReplyForm.$error.minlength[0].$viewValue.length}} characters</li>
</ul>
<button type="submit">Submit</button>
</div>
</form>
</div>
我的问题:
{{main.adminArticleReplyForm}}
commentReply _ {{$ index}}始终是ng-repeat中的最后一个$ index,例如,如果表单中数组中的4个注释始终为commentReply_4
,但textareas名称在{ {1}}是正确的。DOM
,但是如果我从表单名称中删除main
,那么一切都很顺利。main
仅对ng-repeat中的最后一个$ index进行验证,以前忽略$ index 答案 0 :(得分:1)
由于AngularJS默认验证适用于元素名称的层次结构以检测其状态,因此您使用的textarea
名称为commentReply_{{$index}}
,带有下划线,但您使用的是commentReply{{comment.number}}
验证表达式。所以用下划线看看它会起作用。所以,最终代码看起来像这样:
<div ng-repeat="comment in comments track by $index">
<form name="main.adminArticleReplyForm" novalidate>
<div ng-class="{'has-success':(main.adminArticleReplyForm.commentReply_{{$index}}.$valid), 'has-error':(!main.adminArticleReplyForm.commentReply_{{$index}}.$valid)}">
<textarea name="commentReply_{{$index}}" ng-model="main.commentReply[$index]" required></textarea>
<ul ng-show="(!main.adminArticleReplyForm.commentReply_{{comment.number}}.$pristine && main.adminArticleReplyForm.$error.minlength[0].$viewValue.length)">
<li>You have to add {{10 - main.adminArticleReplyForm.$error.minlength[0].$viewValue.length}} characters</li>
</ul>
<button type="submit">Submit</button>
</div>
</form>
</div>
&#13;
答案 1 :(得分:1)
<强>描述强>
index
跟踪重复最后一个索引main
添加到form
,因为表单是重复的,所以如果您只想让一个表单重复,则将其设置为唯一;所以我们只使用comment.adminArticleReplyForm
作为表单名称,而main.comments
只使用来自控制器的main
。ng-repeat
内创建它们并且都是唯一的。<div ng-app="app" ng-controller="ctrl as main">
<div ng-repeat="comment in main.comments">
<form name="comment.adminArticleReplyForm" novalidate>
{{comment.adminArticleReplyForm}}
<div>
<textarea name="commentReply" ng-model="comment.commentReply" required></textarea>
<button type="submit">Submit</button>
</div>
</form>
<hr/>
</div>
</div>