【问题标题】:Multiple sets of radio button with ng-model and ng-repeat多组带有 ng-model 和 ng-repeat 的单选按钮
【发布时间】:2016-09-28 19:00:33
【问题描述】:

我是 Angular 的新手,在设置单选按钮的默认选项时遇到了一些问题。我已经检查了其他答案,使用 $parent 并不能解决我的问题,或者我用错了。

我有一组单选按钮,其中包含 2 个输入:

input type="radio" name="@{{ form.form_id }}_@{{ $index }}" ng-model="$parent.field.field_data.suggested" value="@{{ field.field_data.value_a}}" > @{{ field.field_data.value_a }} <br>
input type="radio" name="@{{ form.form_id }}_@{{ $index }}" ng-model="$parent.field.field_data.suggested" value="@{{ field.field_data.value_b }}"> @{{ field.field_data.value_b }}

如果页面仅显示 1 组(对)单选按钮,则它正确设置了单选按钮组的默认值。这里的问题是,当 ng-repeat 生成 3 组(3 对)单选按钮时,它只设置最后一组单选按钮的值,其他 2 组未选中或留空。

这是因为单选按钮是使用 2 ng-repeats 生成的吗?为了提供帮助,这是我的代码。

我有一个数组$scope.filtered_forms,由以下人员设置:

$scope.filtered_forms[index] = {
      form_id:id,
      fields:[{
             field_data: {field.label,
                          field_suggested:string,
                          value_a:string,
                          value_b:string},
             field_type: radio
             },{
             field_data: {field.label,
                          field_suggested:string,
                          value_a:string,
                          value_b:string},
             field_type radio
             },{
              ...same input as above each object represents a group of radio
             }]
}

基本上,$scope.filtered_forms 包含表单对象。在我的 html 文件中,我有这个:

<div ng-repeat="form in filtered_forms" id="@{{ form.form_id }}">
 <table class="table" id="borderless">
       <tr ng-repeat="field in form.fields">
              <th scope="row" width="35%">@{{ field.field_data.label }}</th>
                 <td>
                    <div  ng-if="field.field_type == 'radio'" style="margin-bottom: 10px">
                        <input type="radio" name="@{{ form.form_id }}_@{{ $index }}" ng-model="$parent.field.field_data.suggested" value="@{{ field.field_data.value_a}}" > @{{ field.field_data.value_a }} <br>
                        <input type="radio" name="@{{ form.form_id }}_@{{ $index }}" ng-model="$parent.field.field_data.suggested" value="@{{ field.field_data.value_b }}"> @{{ field.field_data.value_b }}
                    </div>
                 </td>
         </tr>
   /table>

这会产生 2 组/对单选按钮,但只有最后一组获得默认值。即使使用 ng-checked 甚至没有 $parent。

附加信息,field_suggested 与 value_a 或 value_b 具有相同的值。您可以看到单选按钮低于 2 ng-repeats。我正在使用 laravel 刀片,这个 html 文件位于模态框内。我删除了表单中与问题无关的一些 html 数据和属性。

感谢任何帮助。

谢谢!

【问题讨论】:

  • 查看您的代码我猜在您的第二个 ng-repeat 中,因为您正在为每个索引迭代 form.fields,它将创建两个具有相同名称、型号等的收音机,这就是您想要的吗?
  • @nikhilmehta 是的,它将创建 2 个具有相同名称和型号的收音机,这将是 1 组/一对单选按钮。当我得到 3 组收音机时,默认情况下只会设置最后一组。

标签: angularjs radio-button angularjs-ng-repeat angular-ngmodel laravel-blade


【解决方案1】:

你似乎混合了很多东西。我复制了您的代码,创建了一个 plunker,发现无线电组的名称实际上不是 form_id_{{$index}},但它具有整个对象作为字符串。我已经更改了代码,希望对您有所帮助。 见代码here 问题在于您的组名为什么要在名称中使用 @。请删除它们,它应该可以正常工作。另请注意,name 属性的值中没有特殊字符。

name="{{ form.form_id }}_{{ $index }}"

【讨论】:

  • 哎,我之所以加@,是因为在处理laravel Blade时,{{value}}指的是一个php变量。为了调用 Angular js 变量,它需要@{{value}}。
  • 在这种情况下,请检查开发人员工具中单选按钮的名称,如果它包含任何特殊字符,如果是,则可能这就是您遇到所遇到行为的原因。如果不是,它包含什么?
  • 我去看看。但目前,使用我的代码它将显示name="26_1"
  • 把下划线改成了name="26test1",还是不行。
  • 你能创建 plunker。这将很容易为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 2016-08-06
  • 2017-06-24
  • 1970-01-01
  • 2017-04-16
  • 2016-02-10
  • 2016-04-22
相关资源
最近更新 更多