【问题标题】:Dynamically check for form completion within a div动态检查 div 中的表单完成情况
【发布时间】:2016-09-14 04:26:37
【问题描述】:
<div class="well">
  <div class="panel-title>
    <span class="fa fa-caret-right" ng-if="!showGeneral"></span>
    <span class="fa fa-caret-down" ng-if="showGeneral"></span>
  </div>
  <label>GENERAL</label>
  <div ng-if="generalFormName.$valid" class="pull-right">
     <i class="fa fa-check" style="color:#4cc94c;font-size:large;"></i>
  </div>
  <div class="panel-collapse" ng-if="showGeneral">
    <general></general>
  </div>
</div>

<div>
<form name="generalFormName" novalidate autocomplete="off">
    <input type="text" class="form-control align" required  ng-model="infor.name" />
</form>
</div>

指令general 是另一个html。当用户填写该表单中的必填字段时,我需要在标签右侧显示一个复选标记。我没有任何按钮来提交和发送表单数据,然后检查验证。 formname.$valid 时我只需要一个复选标记。我添加了一个ng-if,但由于某种原因我无法得到它。

有人可以帮我解决这个问题吗?会有很大帮助的。

提前致谢。

【问题讨论】:

  • 添加带有表单标签的html。
  • 控制台中的任何内容
  • Nope.. 我试图在标签旁边打印 `{{generalFormName.$invalid}} 并且没有得到真值或假值。我想我错过了@RIYAJKHAN 的范围

标签: html angularjs validation angularjs-directive


【解决方案1】:

Angular 中的表单通过其名称 使其验证状态可用,并且仅对其范围和后代范围 可用。目前&lt;general&gt; 指令超出了表单的范围,因此它无法访问验证数据。最简单的解决方案是重新定位表单以包含输入和&lt;general&gt; 指令:

<form name="generalFormName" novalidate autocomplete="off">
    <div class="well">
        ...
        <general></general>
        ...
    </div>

    <div>
        <input type="text" class="form-control align" required ng-model="infor.name" />
    </div>
</form>

如果&lt;form&gt; 必须绝对保持原样,您可以用ng-form 包装它并在&lt;general&gt; 中使用ng-form 的有效性:

<div ng-form="ngFormName">
    <div class="well">
        ...
        <general valid="ngFormName.$valid"></general>
        ...
    </div>

    <div>
        <form name="generalFormName" novalidate autocomplete="off">
            <input type="text" class="form-control align" required ng-model="infor.name" />
        </form>
    </div>
</div>

内部generalFormName的有效性影响包装器ngFormName的有效性。

如果两种解决方案都不起作用(我看不出原因),您始终可以创建一个指令,将其相邻形式的有效性发布到父范围内的变量。在父作用域中使用变量比较棘手,相信前面的解决方案应该够用了,不再赘述。它可以调用回调函数,而不是变量 - 期待更少的惊喜。

【讨论】:

  • 我还没有尝试过,但我如何做到这一点是通过为页面中使用的控制器提供别名(ctrller)并在指令之前添加条件 ng-if="ctrller.generalFormName.$valid" 。我用这个让它工作了。
猜你喜欢
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多