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

use*_*127 671 angularjs 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",
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*ler 1388

怎么样:

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

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

  • @IsabelHM由于很多原因,我们很多人建议不要在`ngRepeat`中迭代对象.事实上,我曾经听过核心团队成员后悔有能力这样做!通常最好将控制器中的对象转换为数组; 这使得意图更加清晰,并降低了在某些情况下出现奇怪/不可预测行为的风险.你可以按照通常的方式排序.:-) (29认同)
  • @sethflowers正如我在之前的评论中提到的,我不建议迭代对象中的键.将它转换为控制器中的数组会更好.假设根据您的业务模型没有惯用的方法,ES6使它变得非常简单:`Object.getOwnPropertyNames(data).map(k =>({key:k,value:data [k])); `. (4认同)
  • 它就像一个魅力.唯一的问题是它将按键按字母顺序排列,因此如果项目顺序与显示相关,则命名很重要. (2认同)
  • 正如IsabelHM所说,输出按名称的字母顺序排列。有没有办法强迫它不这样做? (2认同)

小智 127

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

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

  • @cbk与使用`ng-model ="value"`不一样? (4认同)
  • 谢谢!出于好奇,您是否在某个地方的文档中找到了这种技术?我徒劳地搜索,直到找到你的答案. (2认同)

Fel*_*tro 13

我不认为有角度的内置函数可以做到这一点,但你可以通过创建一个包含所有头名称的单独的scope属性来实现,你可以像这样自动填充这个属性:

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

$scope.objectHeaders = [];

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

// Output: [ 'foo', 'bar' ]
Run Code Online (Sandbox Code Playgroud)


小智 5

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

Java脚本

$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;
Run Code Online (Sandbox Code Playgroud)

的HTML

<p ng-repeat="obj in data">
   <font ng-repeat="(key, value) in obj">
      {{key}} : {{value}}
   </font>
</p>
Run Code Online (Sandbox Code Playgroud)