正如Wayne Ellery在plunker中所展示的那样,第二个代码示例确实有效。错误发生在页面的其他位置。
http://plnkr.co/edit/rtmwOzhiWn0695OGwS9b?p=preview
我试图禁用“提交”#39;使用AngularJS的表单上的按钮,但是如果表单在ng-repeat中,我会遇到麻烦。
以下代码可以正常使用:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid">Save</button>
</form>
然而,即使数组中只有一个项目,也不会这样做:
<div ng-repeat="item in data.Items">
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid">Save</button>
</form>
<div>
据推测,这是因为表格的名称在某种程度上被重复改变了。我看到一条建议将{{$ index}}添加到表单名称
的帖子AngularJs dynamic name for a form inside ng-repeat
但是,如果我这样做,我不知道如何在ng-disabled标签中访问表单名称 - 显然这不会起作用:
<div ng-repeat="item in data.items" ng-init="formName = 'myForm' + $index">
<form name="{{formName}}">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="{{formName}}.$invalid">Save</button>
</form>
</div>
如何访问正确的表单以检查当前表单的验证?
答案 0 :(得分:0)
我不确定我的代码中的错误究竟是什么,但是在删除ng-repeat然后重新输入整个内容之后它现在按预期工作,所以我会回答为了清楚起见。
正如pankajparkar和WayneEllery在评论中指出的那样,在ng-repeat中访问$ valid的正确语法就是:
<div ng-repeat="item in data.Items">
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid">Save</button>
</form>
<div>