使用ng-重复进行角度单选按钮验证

时间:2015-08-13 14:05:27

标签: angularjs radio-button angularjs-validation

我遇到了一个有趣的角度验证问题。我需要确保选中了单选按钮(加载时它们可能没有默认值)。单选按钮的值使用ng-repeat从数组迭代。对于用户列表,这整件事也发生在另一个ng-repeat内。

问题是我必须在相关单选按钮的每个组上设置唯一/动态name属性,否则选择一个将取消选择其他行中的其他按钮。基于name属性进行验证,我似乎找不到在所需的ng-classng-show表达式中使用此唯一/动态名称的方法。

这是行不通的: ng-show="userFormRow.service-{{$index}}.$invalid"

以下是上下文中的代码示例:

<table class='table table-striped table-bordered'>
    <tbody>
      <tr ng-repeat="u in users"
          ng-form="userFormRow">
        <td>
          <!-- THIS is having an issue determining the name of this form item since I need to generate a dynamic one here-->
          <div class="form-group"
               ng-class="{'has-error': userFormRow.service-{{$index}}.$invalid }">
            <label class="control-label center-block">Service</label>
            <div class="radio-inline" ng-repeat="o in serviceOptions">
              <label>
                <!-- HERE is where I define the unique name attribute based on the index of the table repeater -->
                <input type="radio"
                       name="service-{{$parent.$index}}"
                       value="{{::o}}"
                       ng-model="u.Service"
                       ng-required="!u.Service"> {{::o}}
              </label>
            </div>

            <!-- THIS is having an issue determining the name of this form item since I need to generate a dynamic one here-->
            <p class="help-block" ng-show="userFormRow.service-{{$index}}.$invalid">A service must be selected!</p>
          </div>
        </td>
      </tr>
    </tbody>
  </table>

这是一个完整的代码示例。http://codepen.io/chrismbarr/pen/eNoGLJ?editors=101检查控制台是否有错误

1 个答案:

答案 0 :(得分:2)

您应该使用bracket notation来访问变量对象属性:

dnx . ef migration apply

与ngClass相同:

ng-show="userFormRow['service-' + $index].$invalid"

演示http://codepen.io/anon/pen/rVbYpG?editors=100