【 js 框架 Angular 】价格排序(angularJs版)

今天刚写完价格排序,趁着脑子还记得,就记录一下。难倒是不难,但是有坑。
用的方法是  sort()。

坑:

如果有分页,那么请将排序的函数写在你从后台查询数据的函数里。如果写在外面,获取 ng-repeat 出来的 list ,那么就会导致它只排当前那一页的序,也就是100个 li ,分 10 页,排序函数写在外面,那么就只排某页的 10 个 li 价格的序。所以要写在含有 从后台调过来的 100 个 li 的函数里,对 100 个 li 进行排序。

这里不再模拟数据了,写出个大概意思,理解万岁。

假设 result 是你从后台调取过来的 数据结果。它的样子 console 出来之后有可能是这样的:

然后 JS 核心代码如下:

 1 if(result){
 2     $scope.dataList = result.data; 
 3 
 4     var count = true;  
 5     $scope.sortPrice = function(){
 6         if(count){      
 7             $scope.currentPage = 0;     
 8                 $scope.dataList  =  $scope.dataList.sort(function(a,b) {  return parseFloat(a.destPrice) - parseFloat(b.destPrice)});
 9             count = false;
10         }else{
11             $scope.currentPage = 0;     
12             $scope.dataList = $scope.dataList.sort(function(a,b) { return parseFloat(b.destPrice) - parseFloat(a.destPrice)});
13             count=true;
14         }
15     }
16 }

第 4 行设置的 count 的作用:点击 奇数次 为 从小到大 排序,点击 偶数次 为从大到小 排序。 解释:未点击时,设置其为 true,为 true 时点击为顺序,然后将其值设为 false,当为 false 的时候,如果被点击,则倒序,然后再将其设置为 true。

然后 5-15 行就是我们的排序代码。解释如下: 如果 count 为 true 时,则执行 7-9 行代码,先将当前页码返回到第一页,也就是第 7 行的作用,然后将排好序的新的列表再赋值给 $scope.dataList。具体排序 用的原型就是 someThing.sort(function(a,b){return a -b}); 其中 a.destPrice 和 b.destprice 的 destprice 是我从后台请求过来的数据中价格参数,换成你的价格参数就好了。

执行完以上代码,你的 ng-repeat 就会按照新的 dataList 去刷新列表。

1 <li ng-repeat="r in dataList">

最后再将 count 设置为 false,这样下一次点击的时候,就是按照 11-13 行执行倒序代码,道理一样的。

 

进行收尾,在你的价格上绑上 ng-click 事件。

1  <a href="javascript:void(0)" ng-click="submitViewSearch()">价格</a>

 

done。

 

posted @ 2016-05-04 19:01  李佳怡  阅读(934)  评论(4)    收藏  举报