如何为这种结构应用 ng-repeat
How to apply ng-repeat for such structure
我想检索项目集合,然后显示在这些项目下列出的 UI 属性中。问题是我从其中一项服务收到的 JSON 导致了问题:
而不是我通常期望的结构,即
"items": [
{
"field1": "value1",
"field2": "value2",
"id":"ABCDEF1234"
},
{
"field1": "value1",
"field2": "value2",
"id":"XYZ12345"
}
]
我收到:
"items": [
{
"ABCDEF1234": {
"field1": "value1",
"field2": "value2",
"id":"ABCDEF1234"
}
},
{
"XYZ12345": {
"field1": "value1",
"field2": "value2",
"id":"XYZ12345"
}
}
]
通常我会将 'items' 分配给 $scope.items 然后像这样使用 ng-repeat:
<div ng-repeat="item in items">
<ul>
<li>{{item.id}}</li>
<li>Field1 - {{item.field1}}</li>
<li></li>Field2 - {{item.field2}}</li>
</ul>
</div>
但在这种情况下,每个项目都由动态 id 表示,除了显示为字段之一外,还用作对象的键。我应该如何使用 ng-repeat 遍历此类集合以显示如下内容:
ABCDEF1234
字段 1 - 值 1
字段 2 - 值 2
XYZ12345
字段 1 - 值 1
字段 2 - 值 2
预先感谢您的帮助。
您可以在收到它时将其映射为更有用的格式。例如
items = items.map(item => item.values[0]);
这会将其映射到
[
{
"field1": "value1",
"field2": "value2",
"id": "ABCDEF1234"
},
{
"field1": "value1",
"field2": "value2",
"id": "XYZ12345"
}
]
<div ng-repeat="item in items">
<div ng-repeat="(itemKey, itemValue) in item">
<h2>{{ itemKey }}</h2>
<ul ng-repeat="(key, value) in itemValue" ng-if="key !== 'id'">
<li>{{ key }} - {{ value }}</li>
</ul>
</div>
</div>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.items = [{
"ABCDEF1234": {
"field1": "value1",
"field2": "value2",
"id": "ABCDEF1234"
}
}, {
"XYZ12345": {
"field1": "value1",
"field2": "value2",
"id": "XYZ12345"
}
}]
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<div ng-repeat="item in items">
<div ng-repeat="(key, value) in item">
{{key}}
<div ng-repeat="(key, value) in value" ng-if="key!== 'id'">
{{key}}-{{value}}
</div>
<br/>
</div>
</div>
</div>
ng-repeat 会导致性能问题如果你有一个大的 list.It 会创建一些子作用域并且 watchers.It 最好限制使用 ng-repeat.I 建议你以所需格式修改数据,然后使用单个 ng-repeat。
我想检索项目集合,然后显示在这些项目下列出的 UI 属性中。问题是我从其中一项服务收到的 JSON 导致了问题:
而不是我通常期望的结构,即
"items": [
{
"field1": "value1",
"field2": "value2",
"id":"ABCDEF1234"
},
{
"field1": "value1",
"field2": "value2",
"id":"XYZ12345"
}
]
我收到:
"items": [
{
"ABCDEF1234": {
"field1": "value1",
"field2": "value2",
"id":"ABCDEF1234"
}
},
{
"XYZ12345": {
"field1": "value1",
"field2": "value2",
"id":"XYZ12345"
}
}
]
通常我会将 'items' 分配给 $scope.items 然后像这样使用 ng-repeat:
<div ng-repeat="item in items">
<ul>
<li>{{item.id}}</li>
<li>Field1 - {{item.field1}}</li>
<li></li>Field2 - {{item.field2}}</li>
</ul>
</div>
但在这种情况下,每个项目都由动态 id 表示,除了显示为字段之一外,还用作对象的键。我应该如何使用 ng-repeat 遍历此类集合以显示如下内容:
ABCDEF1234
字段 1 - 值 1
字段 2 - 值 2
XYZ12345
字段 1 - 值 1
字段 2 - 值 2
预先感谢您的帮助。
您可以在收到它时将其映射为更有用的格式。例如
items = items.map(item => item.values[0]);
这会将其映射到
[
{
"field1": "value1",
"field2": "value2",
"id": "ABCDEF1234"
},
{
"field1": "value1",
"field2": "value2",
"id": "XYZ12345"
}
]
<div ng-repeat="item in items">
<div ng-repeat="(itemKey, itemValue) in item">
<h2>{{ itemKey }}</h2>
<ul ng-repeat="(key, value) in itemValue" ng-if="key !== 'id'">
<li>{{ key }} - {{ value }}</li>
</ul>
</div>
</div>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.items = [{
"ABCDEF1234": {
"field1": "value1",
"field2": "value2",
"id": "ABCDEF1234"
}
}, {
"XYZ12345": {
"field1": "value1",
"field2": "value2",
"id": "XYZ12345"
}
}]
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<div ng-repeat="item in items">
<div ng-repeat="(key, value) in item">
{{key}}
<div ng-repeat="(key, value) in value" ng-if="key!== 'id'">
{{key}}-{{value}}
</div>
<br/>
</div>
</div>
</div>
ng-repeat 会导致性能问题如果你有一个大的 list.It 会创建一些子作用域并且 watchers.It 最好限制使用 ng-repeat.I 建议你以所需格式修改数据,然后使用单个 ng-repeat。