orderBy使用下拉列表进行嵌套排序是对数据进行分组

时间:2016-02-08 19:34:02

标签: javascript angularjs

鉴于下面的数据模型,我试图按制造商名称和/或价格对产品进行排序。它是一种工作方式,并且按升序和降序排序,但是它按制造商对分类进行分组,例如,按价格排序时,我希望如下:

Please see jsFiddle here

预期产出(按价格计算)

  1. Apple Macbook - 1200.00

  2. Acer Laptop - 900.00

  3. Apple Ipad - 420.00

  4. Acer Mouse - 20.00

  5. 实际输出(按价格计算)

    1. Apple Macbook - 1200.00

    2. Apple Ipad - 420.00

    3. Acer Laptop - 900.00

    4. Acer Mouse - 20.00

    5. 这似乎是一个直截了当的问题,但我是Angular的新手,所以只是试着理解它。任何帮助都会很棒!

      <select ng-model="sortBy">
        <option value="" selected="selected">Sort Type</option>
        <option value="+price">Price - high to low</option>
        <option value="-price">Price - low to high</option>
        <option value="-manufacturerName">Manufacturer A-Z</option>
        <option value="+manufacturerName">Manufacturer Z-A</option>
      </select>
      
      <div ng-repeat="manufacturer in manufacturer.manufacturers">
        <div ng-repeat="product in manufacturer.products | filter:filterByFeature | orderBy:sortBy">
        // stuff
        </div>
      </div>
      
      {
      "manufacturers": [
      {
        "manufacturerId": 1,
        "manufacturerName": "Apple",
        "products": [
          {
            "name": "Macbook",
            "price": 1200.00
          },
          {
            "name": "Ipad",
            "price": 420.00
          }
        ]
      },
      {
        "manufacturerId": 2,
        "manufacturerName": "Acer",
        "products": [
          {
            "name": "Laptop",
            "price": 900.00
          },
          {
            "name": "Mouse",
            "price": 20.00
          }
        ]
      }
      ]
      }
      

      Please see jsFiddle here

1 个答案:

答案 0 :(得分:1)

您没有对制造商进行分类。围绕ng-repeat的{​​{1}}不会对制造商进行排序,因此它将始终是相同的顺序,并且单个制造商的产品中的子阵列将被排序而不考虑其他产品。您可能希望重新构建数据,以便它可以排序的单个产品列表。

manufacturer.manufacturers

应该这样做(在示例中使用下划线)。