在角度侧显示单选框的旧代码在此之前写成:
<label ng-repeat="item in items" class="col-xs-3">
<input type="radio" name="{{item.name}}"
value="{{item}}"
ng-change="saveRadio(x,y,z)"
ng-model="data[item.name]">
{{item.name}}
</label>
问题是item
是一个对象,而函数saveRadio
用于以文本格式保存对象。我们尝试将value
替换为ng-value
,如下所示。现在预选的已保存答案没有发生。代码如下所示:
<label ng-repeat="item in items" class="col-xs-3">
<input type="radio" name="{{item.name}}"
ng-value="item"
ng-change="saveRadio(x,y,z)"
ng-model="data[item.name]">
{{item.name}}
</label>
scope
变量数据具有答案数组映射。
我在这里遗漏了什么,或者是否有更多内容要添加用于对象比较?
答案 0 :(得分:0)
想出这个,显然ng-model和ng-value可以存储对象,但不进行对象比较。添加具有唯一值的ng-checked将预先选择radiobox,如下所示:
<label ng-repeat="item in items" class="col-xs-3">
<input type="radio" name="{{item.name}}"
ng-value="item"
ng-checked="item.option == data[item].option)"
ng-change="saveRadio(x,y,z)"
ng-model="data[item.name]">
{{item.name}}
</label>
答案 1 :(得分:0)
您也可以通过这种方法实现目标:
$scope.items = [{id:1,name:"first"}];
$scope.savedAnswer = {id:1,name:"first"};
var index = $scope.items.map(function(obj, index) {
if(obj.name == $scope.savedAnswer.name) {
return index;
}
}).filter(isFinite);
$scope.preselectedAnswer = $scope.items[index];
查看强>
<label ng-repeat="item in items" class="col-xs-3">
<input type="radio" name="{{item.name}}"
ng-value="item"
ng-change="saveRadio(x,y,z)"
ng-model="preselectedAnswer">
{{item.name}}
</label>