Javascript 如何使用Angular 1.x中的HTML表处理带有ng repeat的嵌套结构

Javascript 如何使用Angular 1.x中的HTML表处理带有ng repeat的嵌套结构,javascript,angularjs,Javascript,Angularjs,假设我们有以下数据结构: var data = [ { name: "item name", nestedData: [{ name: "nested name", quantity: 1 }, { name: "nested name 2", quantity: 2 } ] }, { name: "item name 2"

假设我们有以下数据结构:

var data = [
   {
      name: "item name",
      nestedData: [{
         name: "nested name",
         quantity: 1
      },
      {
         name: "nested name 2",
         quantity: 2
      }
      ]
   },
   {
      name: "item name 2",
      nestedData: [{
         name: "nested name 3",
         quantity: 3
      }
      ]
   }
];
ng repeat
指令的标准行为将迭代高级元素。如果我们运行
ng repeat=“数据中的项”
它将生成两个项

在不使用自定义指令的情况下,是否可以在第一个项(“项名称”)上迭代两次(将其乘以嵌套数据数组的长度)

我希望实现的输出是:

<table>
   <thead>
      <th>Name</th>
      <th>Nested name</th>
      <th>Nested quantity</th>
   </thead>
   <tbody>
      <tr>
         <td rowspan="2">item name</td>
         <td>nested name</td>
         <td>1</td>
      </tr>
      <tr>
        <td ng-hide="true">item name</td>
        <td>nested name 2</td>
        <td>2</td>
      </tr>
      <tr>
        <td>item name 2</td>
        <td>nested name 3</td>
        <td>3</td>
      </tr>
   </tbody>
</table>

名称
嵌套名称
嵌套数量
项目名称
嵌套名称
1.
项目名称
嵌套名称2
2.
项目名称2
嵌套名称3
3.

嵌套的
ng repeat
不适合这种情况,因为需要迭代

您可以使用嵌套的ng repeat来获得所需的结果,因为具有多个tbody元素是有效的HTML

下面是一个工作示例的示例

<table>
    <thead>
      <th>Name</th>
      <th>Nested name</th>
      <th>Nested quantity</th>
    </thead>
    <tbody ng-repeat="item in data">
          <tr ng-repeat="nestedItem in item.nestedData">
            <td rowspan="{{item.nestedData.length}}" ng-hide="$index == 1">{{item.name}}</td>
            <td>{{nestedItem.name}}</td>
            <td>{{nestedItem.quantity}}</td>
          </tr>
    </tbody>
  </table>

名称
嵌套名称
嵌套数量
{{item.name}
{{nestedItem.name}
{{nestedItem.quantity}

您可以使用嵌套的ng repeat来获得所需的结果,因为包含多个tbody元素的HTML是有效的

下面是一个工作示例的示例

<table>
    <thead>
      <th>Name</th>
      <th>Nested name</th>
      <th>Nested quantity</th>
    </thead>
    <tbody ng-repeat="item in data">
          <tr ng-repeat="nestedItem in item.nestedData">
            <td rowspan="{{item.nestedData.length}}" ng-hide="$index == 1">{{item.name}}</td>
            <td>{{nestedItem.name}}</td>
            <td>{{nestedItem.quantity}}</td>
          </tr>
    </tbody>
  </table>

名称
嵌套名称
嵌套数量
{{item.name}
{{nestedItem.name}
{{nestedItem.quantity}

这是一种实现预期输出的不同方法

var-app=angular.module('myApp',[]);
应用程序控制器('myCtrl',函数($scope){
风险值数据=[
{
名称:“项目名称”,
嵌套数据:[
{
名称:“嵌套名称”,
数量:1
},
{
名称:“嵌套名称2”,
数量:2
},
{
名称:“嵌套名称3”,
数量:3
}
]
},
{
名称:“项目名称2”,
嵌套数据:[{
名称:“嵌套名称3”,
数量:3
}
]
}
];
var nestedData=[];
角度.forEach(数据、功能(项){
如果(item.nestedData.length>1){
angular.forEach(item.nestedData,function(nestedItem){
嵌套数据推送({
名称:item.name,
nestedName:nestedItem.name,
NestedQuantity:nestedItem.quantity,
colspan:item.nestedData.length
});
});
}否则{
嵌套数据推送({
名称:item.name,
nestedName:item.nestedData[0]。名称,
嵌套数量:物料。嵌套数据[0]。数量
});
}
});
$scope.data=nestedData;
});
tr.multiple>td:第一个孩子{
显示:无;
}

名称
嵌套名称
嵌套数量
{{item.name}
{{item.nestedName}
{{item.nestedQty}

这是一种实现预期输出的不同方法

var-app=angular.module('myApp',[]);
应用程序控制器('myCtrl',函数($scope){
风险值数据=[
{
名称:“项目名称”,
嵌套数据:[
{
名称:“嵌套名称”,
数量:1
},
{
名称:“嵌套名称2”,
数量:2
},
{
名称:“嵌套名称3”,
数量:3
}
]
},
{
名称:“项目名称2”,
嵌套数据:[{
名称:“嵌套名称3”,
数量:3
}
]
}
];
var nestedData=[];
角度.forEach(数据、功能(项){
如果(item.nestedData.length>1){
angular.forEach(item.nestedData,function(nestedItem){
嵌套数据推送({
名称:item.name,
nestedName:nestedItem.name,
NestedQuantity:nestedItem.quantity,
colspan:item.nestedData.length
});
});
}否则{
嵌套数据推送({
名称:item.name,
nestedName:item.nestedData[0]。名称,
嵌套数量:物料。嵌套数据[0]。数量
});
}
});
$scope.data=nestedData;
});
tr.multiple>td:第一个孩子{
显示:无;
}

名称
嵌套名称
嵌套数量
{{item.name}
{{item.nestedName}
{{item.nestedQty}

首先,您可以在一个级别上使用递归方法在较低的级别上访问数组。您可以告诉我们结果的外观吗like@Landeeyo预期的输出是什么样子的,只需将其添加到question@Landeeyo这就是输出的内容。为了确保这样做,您可以向ng repeat添加一个,您仍然可以使用嵌套的ng repeat执行此操作,一个表包含多个TBody是有效的HTML,这是使用工作行span首先您可以在一个级别的使用映射中使用数组,使用递归方法访问lowerCan,您可以告诉我们结果的外观like@Landeeyo预期的输出是什么样子的,只需将其添加到question@Landeeyo这就是输出的内容。为了确保这样做,您可以向ng repeat添加一个,您仍然可以使用嵌套的ng repeat来执行此操作,一个表包含多个TBody是有效的HTML,这是使用工作行span非常感谢George:)。我不知道可以在身体上设置ng重复。很好的解决方案。非常感谢乔治:)。我不知道可以在身体上设置ng重复。很好的解决方案,谢谢你,维拉斯。我决定认为乔治的答案是正确的,因为它更简单