在ng-value和ng-model(Angularjs)中映射对象
Mapping objects in ng-value and ng-model (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
用于将对象保存为文本格式。我们尝试用ng-value
替换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
变量数据具有答案映射数组。
我在这里遗漏了一些东西,还是还有更多的东西要添加用于对象比较?
想通了这一点,显然ng-model和ng-value可以存储对象,但不做对象比较。添加具有唯一值的 ng-check 将预先选择单选框,如下所示:
<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>
您还可以使用此方法实现目标:
$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>
普伦克 : http://plnkr.co/edit/83atxi7JGtyBSlRqK2xo?p=preview
相关文章:
- immutable.js与嵌套映射/对象的比较/相等性能
- Javascript映射对象成员以返回新的扁平对象
- 在Redux中映射对象数组数据
- 映射对象数组,并且仅采用唯一
- 通过条目索引访问映射对象
- 如何映射对象数组的名称以更改字段名称
- 挖空映射对象未由杜兰达尔视图模型返回
- Ajax 响应作为要绑定到 HTML 的映射对象
- 从数组中的键遍历嵌套映射/对象
- 在 javascript 中映射对象数组并按键分组
- 访问数组中的映射对象与循环/循环中的访问之间的差异
- 在 AngularJS 中的视图之间保留 GoogleMaps 映射对象
- 如何映射对象数组中的键和值
- 有没有一种方法可以创建与Java<->JSON映射对象,如JSON.stringfy(jsObject)创建的
- 如何在JavaScript中将对象数组转换为映射对象
- onClick事件无法在react映射对象中找到函数
- 使用jquery映射对象字段
- 如何映射对象's键,使JSON在React中更容易处理
- 寻找从其他函数访问映射对象
- 如何使用lodash通过给定键映射对象