使用ng-repeat和$ index通过二维数组

时间:2018-03-22 10:05:17

标签: javascript angularjs angularjs-ng-repeat

有了这个输入:

myArray = [
            {name: "name1", id: 1, parameters: ["first", "second"]},
            {name: "name2", id: 2, parameters: ["first"]},
            {name: "name3", id: 3, parameters: ["first", "second"]},
];

我想把它放在桌子上看起来像这样:

enter image description here

我尝试这样做,前两列是正确的,但最后一列没有出现:

<tr ng-repeat="rows in $ctrl.name track by $index">
    <td>{{$ctrl.name[$index]}}</td>
    <td>{{$ctrl.id[$index]}}</td>
    <td><span ng-repeat="rows in $ctrl.parameters[$index] track by $secondIndex">{{$ctrl.parameters[$index][$secondIndex]}}</span></td>
</tr>

错误消息是

  

错误:[ngRepeat:dupes]不允许在转发器中重复。使用   'track by'表达式指定唯一键。

所以可能两个ng-repeats不是解决方案,但它不知道如何做到这一点。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

好吧,你应该在ng-repeat上使用myArray,然后展示你想要的任何内容。

要以所需格式显示parameters,您可以使用row.parameters.toString().replace(',', ' ')

请检查工作信息

由于

&#13;
&#13;
var app = angular.module('myApp', []);
app.controller('ctrl', function($scope){
$scope.myArray = [
            {name: "name1", id: 1, parameters: ["first", "second"]},
            {name: "name2", id: 2, parameters: ["first"]},
            {name: "name3", id: 3, parameters: ["first", "second"]},
];

})
&#13;
table {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 100%;
}

td, th {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
}

tr:nth-child(even) {
    background-color: #dddddd;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="ctrl">
<table >
  <tr>
    <th>Name</th>
    <th>Id</th>
    <th>Parameters</th>
  </tr>
  <tr ng-repeat="row in myArray">
    <td>{{row.name}}</td>
    <td>{{row.id}}</td>
    <td>{{ row.parameters.join(' ') }}</td>
   </tr>
</table>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这也应该有效:

<tr ng-repeat="item in myArray">
  <td>{{item.name}}</td>
  <td>{{item.id}}</td>
  <td>
    <span ng-repeat="subItem in item.parameters">{{subItem}}</span>
   </td>
 </tr>

答案 2 :(得分:0)

Aleksey Solovey建议的解决方案解决了这个问题:

void f(const int *p)

答案 3 :(得分:0)

使用此

<tr ng-repeat="rows in myArray track by $index">
    <td>{{ rows.name }}</td>
    <td>{{ rows.id }}</td>
    <td><span ng-repeat="data in rows.parameters track by $index">{{ data+ " " }}</span></td>
</tr>