我有一个html模板,其中一个ng-repeat嵌套在父ng-repeat中。父ng-repeat包含单选按钮,用户可以选择“满意”或“不满意”,分别对应值1和0。如果用户选择“不满意”,则会显示详细的选项列表,以便他们可以选择更多的无线电以获取更多信息。这是html;
<div class="group" ng-repeat="group in Groups">
<table>
<tr>
<td>{{group.Description}}</td>
<td><input type="radio" value="1" name="{{group.Id}}" ng-model="group.SatisfactionLevel" /></td>
<td><input type="radio" value="0" name="{{group.Id}}" ng-model="group.SatisfactionLevel" /></td>
</tr>
</table>
<div class="group-detail" ng-class="{'hidden': group.SatisfactionLevel != 1}">
<table>
<tr ng-repeat="item in group.Details">
<td>{{item.Description}}</td>
<td><input type="radio" value="1" name="{{item.Id}}" ng-model="item.SatisfactionLevel" /></td>
<td><input type="radio" value="0" name="{{item.Id}}" ng-model="item.SatisfactionLevel" /></td>
</tr>
</table>
</div>
从服务器返回的json看起来像这样;
"Groups": [
{
"Id":"AA",
"Description":"Service",
"SatisfactionLevel":1,
"Details":[{"Id":"AA1","Description":"Cleanliness","SatisfactionLevel":1},
{"Id":"AA2","Description":"Timeliness","SatisfactionLevel":1}
]
},
{
"Id":"AB",
"Description":"Food",
"SatisfactionLevel":1,
"Details":[{"Id":"AB1","Description":"Price","SatisfactionLevel":1},
{"Id":"AB2","Description":"Portion","SatisfactionLevel":1}
]
}
]
除了未检查嵌套ng-repeat中的单选按钮外,一切正常。我在fiddler中可以看到Satisfactionlevel属性包含值。谁知道我哪里出错了?感谢
更新
代码确实没有问题。事实证明Groups
中的不同项可以包含相同的Details
项。由于我使用name="{{item.Id}}"
作为name属性,因此具有相同名称但值不同的其他组详细信息中的其他无线电导致具有相同名称的先前无线电被取消选中。
这是我的修复;
<td><input type="radio" value="1" name="{{group.Id}}-{{item.Id}}" ng-model="item.SatisfactionLevel" /></td>
因为组ID是唯一的。
答案 0 :(得分:2)
首先,你在input
中都有相同的价值 - 我猜这是一个错字吗?
其次,如果您使用value="1"
,则会将其解释为字符串"1"
,但您的模型是整数1
。
相反,请使用ng-value
:
<input type="radio" ng-value="0" name="{{item.Id}}" ng-model="item.SatisfactionLevel">
<input type="radio" ng-value="1" name="{{item.Id}}" ng-model="item.SatisfactionLevel">