Javascript Angularjs在集合中使用Rowspan

Javascript Angularjs在集合中使用Rowspan,javascript,angularjs,Javascript,Angularjs,我收集了来自JSON请求的数据。。我希望使用angular.显示行跨度。。但是它还不能正常工作。。希望你能帮我 $scope.data = [ { order_number: "A-0001", name: "computer 01-01", status: 'new' }, { order_number: "A-0002", name: "computer 02-01", s

我收集了来自JSON请求的数据。。我希望使用angular.显示行跨度。。但是它还不能正常工作。。希望你能帮我

$scope.data = [
    {
        order_number: "A-0001",
        name: "computer 01-01",
        status: 'new'
    },
    {
        order_number: "A-0002",
        name: "computer 02-01",
        status: 'new'
    },
    {
        order_number: "A-0001",
        name: "computer 01-02",
        status: 'new'
    },
    {
        order_number: "A-0003",
        name: "computer 03-01",
        status: 'check'
    },
    {
        order_number: "A-0001",
        name: "computer 01-03",
        status: 'new'
    },
    {
        order_number: "A-0003",
        name: "computer 03-02",
        status: 'check'
    }

];
我希望我的集合显示在这样的表中

<table class="table table-bordered table-hover">
      <thead>
          <tr>
              <th>Order Number</th>
              <th>Name</th>
              <th>Status</th>
          </tr>
      </thead>
      <tbody>
         <tr>
                <td rowspan="3">A-0001</td>
                <td>01-01</td>
                <td>new</td>
         </tr>
         <tr>
                <td>01-02</td>
                <td>new</td>
         </tr>
         <tr>
                <td>01-03</td>
                <td>new</td>
         </tr>
         <tr>
                <td>A-0002</td>
                <td>02-01</td>
                <td>new</td>
         </tr>

      </tbody>
  </table>

订单号
名称
地位
A-0001
01-01
新的
01-02
新的
01-03
新的
A-0002
02-01
新的

刚刚使用提供的数据为您的问题提供了一个快速而肮脏的解决方案

我用ng repeat和orderBy对数据进行了排序

ng-repeat="item in data | orderBy: 'order_number'"
然后使用函数检查是否需要行跨度


对您来说,更好的解决方案是重构数据,如MaskedTwilight的解决方案所建议的那样,这样您的订单已经按照订单号分组,并且您的项目是该订单的子集合。这就是你可以减少代码和观察者的原因。

只是利用提供的数据快速而肮脏地解决了你的问题

我用ng repeat和orderBy对数据进行了排序

ng-repeat="item in data | orderBy: 'order_number'"
然后使用函数检查是否需要行跨度


对您来说,更好的解决方案是重构数据,如MaskedTwilight的解决方案所建议的那样,这样您的订单已经按照订单号分组,并且您的项目是该订单的子集合。这可以减少代码和观察者。

对于真正的角度解决方案,不需要javascript来改变dom。Angular的目标是让数据本身决定控件的呈现方式

你能改变你的数据结构吗?我觉得有点奇怪,你的id不是唯一的。我擅自更改了它,以便每个订单都有一组子订单,其中包括名称和状态

这是一个经过修改的数据结构的工作plunker。

数据结构:

$scope.data = [
     {
       order_number: "A-0001",
       sub_orders: [
         {
           name: "computer 01-01",
           status: "new"
         },
         {
           name: "computer 01-02",
           status: "new"
         },
         {
           name: "computer 01-03",
           status: "new"
         }
         ]
     },
     {
       order_number: "A-0002",
       sub_orders: [
         {
           name: "computer 02-01",
           status: "new"
         }
         ]
     },
     {
       order_number: "A-0003",
       sub_orders: [
         {
           name: "computer 03-01",
           status: "new"
         },
         {
           name: "computer 03-02",
           status: "new"
         }
         ]
     }

    ];
以下是用于渲染表格的角度代码:

<table class="table table-bordered table-hover">
      <thead>
          <tr>
              <th>Order Number</th>
              <th>Name</th>
              <th>Status</th>
          </tr>
      </thead>
      <tbody ng-repeat="order in data">
        <tr>
          <td rowspan="{{order.sub_orders.length + 1}}">{{order.order_number}}</td>
        </tr>
         <tr ng-repeat="suborder in order.sub_orders">
           <td>{{suborder.name}}</td>
           <td>{{suborder.status}}</td>
        </tr>
      </tbody>
  </table>

订单号
名称
地位
{{顺序.顺序号}
{{suborder.name}
{{suborder.status}

对于真正的角度解决方案,您不需要javascript来更改dom。Angular的目标是让数据本身决定控件的呈现方式

你能改变你的数据结构吗?我觉得有点奇怪,你的id不是唯一的。我擅自更改了它,以便每个订单都有一组子订单,其中包括名称和状态

这是一个经过修改的数据结构的工作plunker。

数据结构:

$scope.data = [
     {
       order_number: "A-0001",
       sub_orders: [
         {
           name: "computer 01-01",
           status: "new"
         },
         {
           name: "computer 01-02",
           status: "new"
         },
         {
           name: "computer 01-03",
           status: "new"
         }
         ]
     },
     {
       order_number: "A-0002",
       sub_orders: [
         {
           name: "computer 02-01",
           status: "new"
         }
         ]
     },
     {
       order_number: "A-0003",
       sub_orders: [
         {
           name: "computer 03-01",
           status: "new"
         },
         {
           name: "computer 03-02",
           status: "new"
         }
         ]
     }

    ];
以下是用于渲染表格的角度代码:

<table class="table table-bordered table-hover">
      <thead>
          <tr>
              <th>Order Number</th>
              <th>Name</th>
              <th>Status</th>
          </tr>
      </thead>
      <tbody ng-repeat="order in data">
        <tr>
          <td rowspan="{{order.sub_orders.length + 1}}">{{order.order_number}}</td>
        </tr>
         <tr ng-repeat="suborder in order.sub_orders">
           <td>{{suborder.name}}</td>
           <td>{{suborder.status}}</td>
        </tr>
      </tbody>
  </table>

订单号
名称
地位
{{顺序.顺序号}
{{suborder.name}
{{suborder.status}

此解决方案非常简单。。这个也行。。但是如果。。。我想要订单号和状态的行跨度?。。或其他具有相同值的列进行分组。正如我所说,这是一个快速而肮脏的解决方案,并不完美,对于您的更改,您将需要重构数据作为MaskedTwilight答案。此解决方案非常简单。。这个也行。。但是如果。。。我想要订单号和状态的行跨度?。。或其他具有相同值的列进行分组。正如我所说的,这是一个快速而肮脏的解决方案,但并不完美,对于您的更改,您需要重构数据作为MaskedTwilight答案。谢谢您的解决方案。。是的,你说得对,最好重组我的数据。。我没有把我的身份证放在我的例子里。。顺便说一句,我只想用rowspan按订单对它进行分组。如果我希望状态的行跨度与订单号相同,该怎么办?有可能吗?有可能,但不会很干净。基本上,您必须使用Sonaryr的解决方案,根据状态对子订单进行排序,并使用函数确定行跨度。在我的脑海中,我想不出一个数据结构可以实现这一点。您可以进一步更改数据结构,因此它是一个包含名称的状态的订单号层次结构,但我不推荐这样做。您的数据结构将开始失去意义。感谢您的解决方案。。是的,你说得对,最好重组我的数据。。我没有把我的身份证放在我的例子里。。顺便说一句,我只想用rowspan按订单对它进行分组。如果我希望状态的行跨度与订单号相同,该怎么办?有可能吗?有可能,但不会很干净。基本上,您必须使用Sonaryr的解决方案,根据状态对子订单进行排序,并使用函数确定行跨度。在我的脑海中,我想不出一个数据结构可以实现这一点。您可以进一步更改数据结构,因此它是一个包含名称的状态的订单号层次结构,但我不推荐这样做。您的数据结构将开始失去意义。