在ng-value和ng-model中映射对象(Angularjs)

时间:2016-07-16 10:59:39

标签: javascript angularjs

在角度侧显示单选框的旧代码在此之前写成:

<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变量数据具有答案数组映射。

我在这里遗漏了什么,或者是否有更多内容要添加用于对象比较?

2 个答案:

答案 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>

plunker:http://plnkr.co/edit/83atxi7JGtyBSlRqK2xo?p=preview