如何在AngularJS中使用ng重复迭代键和值?

在我的控制器中,我有如下数据: $scope.object = data

现在这个数据是字典,其中包含来自json的键和值。

我可以在模板中使用object.name访问属性。有没有办法我也可以迭代键并将它们显示在表格中,如

<tr><td> {{key}} </td> <td> data.key </td>

数据是这样的

{
"id": 2,
"project": "wewe2012",
"date": "2013-02-26",
"description": "ewew",
"eet_no": "ewew",
}
581585 次浏览

我不认为有一个内置函数在角这样做,但你可以通过创建一个单独的范围属性包含所有的头名称,你可以这样自动填充这个属性:

var data = {
foo: 'a',
bar: 'b'
};


$scope.objectHeaders = [];


for ( property in data ) {
$scope.objectHeaders.push(property);
}


// Output: [ 'foo', 'bar' ]

不如:

<table>
<tr ng-repeat="(key, value) in data">
<td> \{\{key}} </td> <td> \{\{ value }} </td>
</tr>
</table>

此方法列在文档中:https://docs.angularjs.org/api/ng/directive/ngRepeat

如果您想使用双向绑定编辑属性值:

<tr ng-repeat="(key, value) in data">
<td>\{\{key}}<input type="text" ng-model="data[key]"></td>
</tr>

一个待办事项列表示例,通过ng-repeat循环对象:

var app = angular.module('toDolistApp', []);
app.controller('toDoListCntrl', function() {
var self = this;
self.toDoListItems = {};// []; //dont use square brackets if keys are string rather than numbers.
self.doListCounter = 0;


self.addToDoList = function() {
var newToDoItem = {};
newToDoItem.title     = self.toDoEntry;
newToDoItem.completed = false;


var keyIs = "key_" + self.doListCounter++;


self.toDoListItems[keyIs] = newToDoItem;
self.toDoEntry = ""; //after adding the item make the input box blank.
};
});


app.filter('propsCounter', function() {
return function(input) {
return Object.keys(input).length;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="toDolistApp">
<div ng-controller="toDoListCntrl as toDoListCntrlAs">
Total Items: \{\{toDoListCntrlAs.toDoListItems | propsCounter}}<br />
Enter todo Item:  <input type="text" ng-model="toDoListCntrlAs.toDoEntry"/>
<span>\{\{toDoListCntrlAs.toDoEntry}}</span>
<button ng-click="toDoListCntrlAs.addToDoList()">Add Item</button> <br/>
<div ng-repeat="(key, prop) in toDoListCntrlAs.toDoListItems">
<span>\{\{$index+1}} : \{\{key}}   : Title = \{\{ prop.title}} : Status = \{\{ prop.completed}} </span>
</div>
</div>
</body>

我们可以遵循下面的过程来避免按字母顺序显示键值。

javascript

$scope.data = {
"id": 2,
"project": "wewe2012",
"date": "2013-02-26",
"description": "ewew",
"eet_no": "ewew",
};
var array = [];
for(var key in $scope.data){
var test = {};
test[key]=$scope.data[key];
array.push(test);
}
$scope.data = array;

超文本标记语言

<p ng-repeat="obj in data">
<font ng-repeat="(key, value) in obj">
\{\{key}} : \{\{value}}
</font>
</p>

完整示例:-

<!DOCTYPE html >
<html ng-app="dashboard">
<head>
<title>AngularJS</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<link rel="stylesheet" href="./bootstrap.min.css">
<script src="./bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
</head>
<body ng-controller="myController">
<table border='1'>
<tr ng-repeat="(key,val) in collValues">
<td ng-if="!hasChildren(val)">\{\{key}}</td>
<td ng-if="val === 'string'">
<input type="text" name="\{\{key}}"></input>
</td>
<td ng-if="val === 'number'">
<input type="number" name="\{\{key}}"></input>
</td>
<td ng-if="hasChildren(val)" td colspan='2'>
<table border='1' ng-repeat="arrVal in val">
<tr ng-repeat="(key,val) in arrVal">
<td>\{\{key}}</td>
<td ng-if="val === 'string'">
<input type="text" name="\{\{key}}"></input>
</td>
<td ng-if="val === 'number'">
<input type="number" name="\{\{key}}"></input>
</td>
</tr>
</table>
</td>


</tr>
</table>
</body>


<script type="text/javascript">


var app = angular.module("dashboard",[]);
app.controller("myController",function($scope){
$scope.collValues = {
'name':'string',
'id':'string',
'phone':'number',
'depart':[
{
'depart':'string',
'name':'string'
}
]
};


$scope.hasChildren = function(bigL1) {
return angular.isArray(bigL1);
}
});
</script>
</html>

您可以在您的javascript(控制器)或html(角度视图)中执行此操作…

js:

$scope.arr = [];
for ( p in data ) {
$scope.arr.push(p);
}

html:

<tr ng-repeat="(k, v) in data">
<td>\{\{k}}<input type="text" ng-model="data[k]"></td>
</tr>

我相信html的方式更有角度,但你也可以在你的控制器中做,并在你的html中检索它…

查看Object键也不是一个坏主意,如果您需要它们,它们会为您提供键的数组,更多信息在这里:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

    Use below code it is working to display your key and value here is key start with 1:
<tr ng-repeat="(key,value) in alert_list" >
<td>\{\{key +1}}</td>
<td>\{\{value.title}}</td>
</tr>
Below is document link for it.

https://docs.angularjs.org/api/ng/directive/ngRepeat