【问题标题】:AngularJS required field validation in ng-repeatAngularJS 需要在 ng-repeat 中进行字段验证
【发布时间】:2020-08-15 08:13:59
【问题描述】:

我正在尝试遵循 AngularJS example 对必填字段进行内联验证。然而,当谈到使用ng-repeat 时,它似乎对我不起作用。

<form name="myForm" novalidate>
  Me: <input required type="text" name="myName" ng-model="name" />
  <span class="error" ng-show="myForm.myName.$error.required">Required!</span>
  <div ng-repeat="friend in friends">
      Friends: <input required type="text" name="myFriend[{{$index}}]" ng-model="friend.name" />
      <span class="error" ng-show="myForm.myFriend[{{$index}}].$error.required">Required</span>
  </div>
</form>

JSFiddle

知道我做错了什么或者我可以做些什么来解决它吗?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    很遗憾,您不能那样做。输入元素不喜欢动态生成名称。您将需要使用 ng-form 作为子表单并包装重复的元素。这是你小提琴的一个分支:http://jsfiddle.net/p26VQ/

    <div ng-controller="MyCtrl">
      <form name="myForm" novalidate>
          Me: <input required type="text" name="myName" ng-model="name" /><span class="error"  ng-show="myForm.myName.$error.required">
      Required!</span>
          <div ng-repeat="friend in friends">
              <ng-form name="subform{{$index}}">
                  Friends: <input required type="text" name="myFriend" ng-model="friend.name" /> 
                  <span class="error" ng-show="subform{{$index}}.myFriend.$error.required">Required</span>
              </ng-form>
          </div>
      </form>
    </div> 
    

    【讨论】:

    • 实际上有一个issue open for AngularJS,其中一个cmets 有一个workaround。这对我的设置效果更好。
    • 对于遇到此问题的任何其他人,问题已关闭,现在可以动态生成名称。
    【解决方案2】:

    至少使用 AngularJS 1.4.3 你可以使用这个:

    name="formControl_{{uniqueId}}"
    

    还有这个:

    ng-messages="myForm[ 'formControl_' + uniqueId ].$error"
    

    摘自 Danny 引用的问题中https://github.com/angular/angular.js/issues/1404#issuecomment-125805732 的评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2017-06-15
      • 2021-10-08
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      相关资源
      最近更新 更多