如何在ng-repeat中的Angular Form上访问$ valid?

时间:2015-02-03 12:05:41

标签: javascript angularjs forms validation

编辑:

正如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>

如何访问正确的表单以检查当前表单的验证?

1 个答案:

答案 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>