如何在ng-repeat中对JSON数据进行排序?

通过

我收到服务器响应并将这些数据绑定到使用ng-repeat进行查看。现在,我要按priceList对这些数据进行排序name我可以使用来对名称进行排序orderBy,但不能使用priceList我想根据对产品进行排序priceList用name排序将改变列表的顺序,而by排序priceList将只影响products每个列表的顺序category它将影响显示类别的顺序。请帮我解决这个问题。
我的代码:

<div ng-controller="Ctrl">
    <pre>Sorting predicate = {{predicate}};</pre>
    <hr/>
    <table class="friend">
        <tr>
            <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a>
            </th>
            <th><a href="" ng-click="predicate = 'priceList'>price</a></th>
        </tr>

    </table>


<div ng-repeat="data in _JSON[0].categories | orderBy:predicate">
       <div ng-repeat="vals in data.itemTypeResults |orderBy:'partTerminologyName'" id="{{vals.partTerminologyName}}">
`<h4 style="background-color: gray">{{vals.partTerminologyName}} : Position :{{vals.position}}</h4>`<br>


<div ng-repeat="val in vals.products">
    <b> Quantity:{{val[0].perCarQty}}</b><br>
    <b> part:{{val[0].partNo}}</b><br>
    <b>sku:{{val[0].sku}}</b><br>
    <b> qtyInStock:{{val[0].qtyInStock}}</b><br>
    <b> priceList:{{val[0].priceList}}</b><br>
    <b>priceSave:{{val[0].priceSave}}</b><br>
    <b> qtyDC:{{val[0].qtyDC}}</b><br>
    <b> qtyNetwork:{{val[0].qtyNetwork}}</b><br>
    <b> priceCore:{{val[0].priceCore}}</b><br>
        </div>
</div>      
    </div>

JS:

$scope._JSON = [
        {"categories":
            [
                {"id":14061,"name":"Drive Belts",
                    "itemTypeResults":[
                        {"partTerminologyName":"Serp. Belt",
                            "position":"Main Drive",
                            "products":{
                                "5060635":[
                                    {"perCarQty":2,"partNo":"5060635",
                                    "sku":"20060904","qtyInStock":2,"qtyNetwork":4,
                                    "qtyDC":6,"priceList":19.15,"priceSave":3.29,
                                    "priceCore":10.0}
                                ],
                                "635K6":[
                                    {"perCarQty":9,"partNo":"635K6",
                                        "sku":"10062449","qtyInStock":2,"qtyNetwork":4,
                                        "qtyDC":6,"priceList":18.15,"priceSave":3.21,"priceCore":10.0}
                                ]
                            }
                        }
                    ]
                },
                {"id":2610,"name":"Drive Belt Tensioners, Idlers, Pulleys & Components",
                    "itemTypeResults":[
                        {"partTerminologyName":"Drive Belt Tensioner Assembly",
                        "position":"N/A",
                            "products":{
                                "950489A":[
                                    {"perCarQty":4,"partNo":"950489A",
                                        "sku":"10150833","qtyInStock":2,"qtyNetwork":4,
                                        "qtyDC":6,"priceList":18.15,"priceSave":3.21,"priceCore":10.0
                                    }
                                ]
                            }},
                        {"partTerminologyName":"Drive Belt Idler Pulley","position":"N/A",
                            "products":{
                                "89161":[
                                    {"perCarQty":1,"partNo":"89161",
                                    "sku":"99995959","qtyInStock":2,"qtyNetwork":4,
                                    "qtyDC":6,"priceList":17.15,"priceSave":3.21,"priceCore":10.0}
                                ],
                                "951373A":[
                                    {"perCarQty":2,"partNo":"951373A","pla":"LTN",
                                    "plaName":"Litens",
                                    "sku":"10150926","qtyInStock":2,"qtyNetwork":4,
                                        "qtyDC":6,"priceList":18.15,"priceSave":3.21,"priceCore":10.0}
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    ];
    $scope.predicate = '';

小提琴:小提琴

stanleyxu2005

您可能需要定义一个非常好的排序函数,或者products在对它们进行解释之前对其进行排序ng-repeat我已经使用underscore.js(或lodash)创建了排序函数。

您可以签出演示(或更新的演示)。产品首先按类别排序,然后在每个类别中按价格排序。

<!-- in html -->
<button ng-click="sortFn=sortByPrice">Sort By Price</button>
<button ng-click="sortFn=doNotSort">Do not Sort</button>
...
<div ng-repeat="val in sortFn(vals.products)">
  ...
// in js
$scope.sortByPrice = function(products) {
  return _.sortBy(products, function(product) {
    return product.length > 0 ? product[0].priceList : 0;
  });
};

$scope.doNotSort = function(products) {
  return products;
};

$scope.sortFn = $scope.doNotSort; // do not sort by default

顺便说一句:您正在直接调用val[0],这是非常危险的,如果产品不包含任何元素,您的代码将被破坏。我的代码不会;-)


更新1

作者要求我提供更纯粹的Angular Way解决方案。

这是我的答案:我认为我的解决方案完全是Angular方式。通常,您可以实现orderBy包装my的过滤器(类似于sortByPrice为什么我不这样做,因为您必须ng-click切换订单过滤器。我宁愿将控制逻辑放到控制器中,而不是一视同仁。当您的项目不断增长时,这将很难维护。


更新2

好吧,+50值得的是,这是您想要的过滤器版本,(由我的大脑编译器输入)请检查小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Angular js中使用嵌套对象将ng-repeat中的数据作为JSON数据排序

如何在Javascript中对Json数据进行排序?

如何在ReactJS中对JSON数据进行排序

如何在Angular JS ng-repeat中对1:1对象映射进行排序

如何在ng-repeat中进行ng-repeat?

如何在嵌套的ng-repeat指令中显示数据

如何在ng-repeat中检查数据类型

如何在ng-repeat中迭代2组数据

ng-repeat中的自定义顺序仅对特定数据进行排序

如何从 json 字符串中对这些数据进行排序

如何在Excel中按数据对列进行排序/排序

如何在javascript中按距离对Json中的数据进行排序?

如何在 swift 4 中对数组中的 JSON 数据进行排序

使用字典数据对 AngularJS ng-repeat 进行排序

如何在输出之前对JSON浮动数据进行排序

如何使用angularjs在ng-repeat中打印Json数据?

在AngularJS中对嵌套ng-repeat的元素进行排序

如何在ng-repeat内进行API函数调用?

如何在 agularjs 中进行 izitoast ng-repeat

如何在Apache Flink中对数据集进行排序?

如何在R中对多个数据帧进行排序

如何在 ReactJs 中对数据进行排序

如何在Spring JPA中对数据进行排序?

如何在Pandas中对数据透视表进行排序

如何在数据框的列中对元组进行排序

如何在PHP中对数组和数据进行排序?

如何在SQL中添加序列/对数据进行排序

如何在数据日志查询中对结果进行排序

如何在R中对这些类型的数据进行排序