我有一个这样的对象
var myObject = {'123':'something','345':'something else'}
我需要将其渲染为:
<option value={'123':'something'}>something</option>
这是我尝试过的:
ng-options="someObj as label for (id,label) in myObject
不起作用!
模型获取“标签”,而不是整个对象。是否可以将对象分配给 SELECT 元素的 value 属性?
编辑
过滤以下形式的对象:{'123':'something','345':'something else'}
.filter('putKeysandValues',function(){
return function(options){
var arr = [];
angular.forEach(options,function(value,key){
arr.push({'key':key,'label':value})
});
return arr;
}
});
最佳答案
您需要向 ngOptions 提供一个具有键和值属性的对象。为此,您需要修改对象的结构才能真正具有此属性。
一种方法是使用为 ngOptions 返回有效数组的过滤器:
ng-options="option.label for option in data.availableOptions | putKeyAndValue"
您可以查看this plunker带有工作过滤器。
如果输入是:
[{'123':'something'}, {'345':'something else'}]
那么输出是:
[{"123":"something","id":123,"label":"something","$$hashKey":"object:3"},{"345":"something else","id":345,"label":"something else","$$hashKey":"object:4"}]
如果要删除过时的 id 属性,请使用 this filter .
如果输入相同的输入,它将返回:
[{"id":123,"label":"something","$$hashKey":"object:3"},{"id":345,"label":"something else","$$hashKey":"object:4"}]
如果您仍然需要返回新数组,则不要在过滤器上执行此操作。在这种情况下,您可以在将数据传递到 View 之前处理数据,所有这些都在 Controller 中 like this .
输入:
{'123':'something', '345':'something else'}
输出:
[{"id":123,"label":"something"},{"id":345,"label":"something else"}]
关于javascript - 分配一个对象来选择值 - ng-options,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876817/