ng-options=""
在没有 ng-repeat=""
的情况下迭代JSON对象的最佳方法是什么...
为了检索所有值。
$scope.examples =
[
{"name":"parent 1",
"subs": [
{"name":"child a", "id":"1a"},
{"name":"child b", "id":"1b"}
]
},
{"name":"parent 2",
"subs": [
{"name":"child a", "id":"2a"},
{"name":"child b", "id":"2b"}
]
}
];
对于在<option>
<select>
,应该返回 1a,1b,2a,2b
我错误地想到了......
<select ng-model="data.sub" ng-options="item.id for item in examples.example.subs"></select>
...将迭代子对象。我需要一个单独的功能吗?某种范围的定义? 任何帮助表示赞赏。
答案 0 :(得分:2)
我认为这是一个非常相似的问题:
http://stackoverflow.com/questions/24860452/double-loop-to-get-ng-options
根据答案,使用ng-options的嵌套结构是不可能的。 您可以做的是将数据展平为数组。
我也擅长更新你的jsfiddle。 请查看:
http://jsfiddle.net/G9jGa/72/
以下代码是我为使其工作而添加的代码:
var app = angular.module('app', []);
app.controller('Ctrl', function($scope) {
$scope.examples =
[
{"name":"parent 1",
"subs": [
{"name":"child a", "id":"1a"},
{"name":"child b", "id":"1b"}
]
},
{"name":"parent 2",
"subs": [
{"name":"child a", "id":"2a"},
{"name":"child b", "id":"2b"}
]
}
];
function flattenArray(array, fn) {
var output = [];
for(var i = 0; i < array.length; ++i) {
var result = fn(array[i]);
if (result)
output = output.concat(result);
}
return output;
}
$scope.Groups = flattenArray($scope.examples, function(item) {
return item.subs;
});