【问题标题】:Validate field count in angular form以角度形式验证字段计数
【发布时间】:2015-08-25 18:27:46
【问题描述】:

我有一个表单,其中模型包含一组子模型,如下所示:

<form name="form1">
    <div ng-repeat="sub in model.submodels">
        <input ng-model="sub.name" required>
        <button ng-click="delSubmodel($index)">x</button>
    </div>
    <button ng-click="addSubmodel()">+</button>
    <button ng-disabled="form1.$invalid" type="submit">Save</button>
</form>

当没有输入字段时(或者,一般来说,当输入字段的计数小于/大于某个值时)如何使表单无效

更新:感谢您的回复,我希望这可以在控制器之外完成。

【问题讨论】:

  • “当没有输入字段时”是什么意思?
  • 您回答了自己的问题。只需检查model.subModels.length的值,然后如果.length
  • @angglada 在提供的示例中,如果model.submodels 是一个空数组,则不会生成任何输入字段,这在我的情况下是无效的。
  • @Vinny 我应该在哪里插入这张支票,以便使用“角度方式”?我绝对不应该直接修改form1.$invalid。我希望它由角度验证机制设置。
  • @checat 在你的控制器中。当您初始化控制器时,您可能应该使表单无效(我假设您将没有子模型)。然后,当您单击 delSubmodel 和 addSubmodel 时,您应该检查子模型的数量,并在必要时使表单无效/验证。

标签: angularjs validation angularjs-validation angularjs-forms


【解决方案1】:

好的,我刚刚得到你想要实现的,你将不得不在表单中添加一个约束,即 subModel 的大小,所以在你的提交方法中:

在做任何事情之前

$scope.form1.$setValidity('size', model.subModels.length <= 0);

如果您的条件为假,这会将表单的有效性设置为假,反之亦然,您也可以显示一条消息以通知用户,添加以下内容:

<form name="form1">
<div ng-repeat="sub in model.submodels">
    <input ng-model="sub.name" required>
    <button ng-click="delSubmodel($index)">x</button>
</div>
<input type="hidden" name="size" ng-model="model.subModels.length" />
<button ng-click="addSubmodel()">+</button>
<button ng-disabled="form1.$invalid" type="submit">Save</button>

如果你觉得你没有很好地理解我的观点,你可以检查这个example,它也是这样做的,只是改变了单个输入的有效性。

希望对你有帮助。

【讨论】:

  • 感谢您的努力!不幸的是,我认为应该在控制器之外进行简单的验证。我曾考虑在隐藏输入上添加“最大”验证,但这也是一种解决方法。
猜你喜欢
  • 2018-12-28
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
相关资源
最近更新 更多