如何在AngularJS中使用ng-repeat迭代键和值?

在我的控制器中,我有这样的数据: $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", } 

怎么样:

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

此方法在文档中列出: http ://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> 

我不认为这样做有angular度的内置函数,但你可以通过创build一个包含所有标题名称的独立的范围属性来做到这一点,你可以自动填充这个属性:

 var data = { foo: 'a', bar: 'b' }; $scope.objectHeaders = []; for ( property in data ) { $scope.objectHeaders.push(property); } // Output: [ 'foo', 'bar' ] 

通过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; 

HTML

 <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(angular度视图)…

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> 

我相信的方式是更多的angular度,但你也可以在你的控制器做,并在您的HTML检索…

也不是一个坏主意看对象的关键,他们给你一个关键的数组,如果你需要他们,更多的信息在这里:

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

这是一个工作的例子:

 <div class="item item-text-wrap" ng-repeat="(key,value) in form_list"> <b>{{key}}</b> : {{value}} </div> 

编辑