Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用orderBy进行Angularjs排序对我不起作用_Javascript_Angularjs_Sorting_Angularjs Ng Repeat_Angular Ui - Fatal编程技术网

Javascript 使用orderBy进行Angularjs排序对我不起作用

Javascript 使用orderBy进行Angularjs排序对我不起作用,javascript,angularjs,sorting,angularjs-ng-repeat,angular-ui,Javascript,Angularjs,Sorting,Angularjs Ng Repeat,Angular Ui,我试图根据评级、定价和总计数对我的家庭列表进行排序。不幸的是,我没有为我工作,我是新来安格拉斯的。 这里是我的html代码。实际上,它是在整理东西,但不是按顺序排列。 ->当用户点击价格btn时,他应该先以最高价格返回,然后以最低价格返回(500040003000),如果再次点击,则订单必须是(300040005000)。总计数和评级的情况类似。我还创建了plunker来编辑您的建议。请编辑并提供我的工作链接。这里是 //html code <body ng-controller="Mai

我试图根据评级、定价和总计数对我的家庭列表进行排序。不幸的是,我没有为我工作,我是新来安格拉斯的。 这里是我的html代码。实际上,它是在整理东西,但不是按顺序排列。 ->当用户点击价格btn时,他应该先以最高价格返回,然后以最低价格返回(500040003000),如果再次点击,则订单必须是(300040005000)。总计数和评级的情况类似。我还创建了plunker来编辑您的建议。请编辑并提供我的工作链接。这里是

//html code
<body ng-controller="MainCtrl as ctrl">
    <div class="col-md-offset-2">
      <button ng-click="orderByPopularity='total_counts'; reverseSort = !reverseSort" class="btn btn-sm btn-info">sort on total counts </button>
      <button  ng-click="orderByPopularity='price'; reverseSort = !reverseSort" class="btn btn-sm btn-danger">sort on Price</button>    
      <button  ng-click="orderByPopularity='avg'; reverseSort = !reverseSort" class="btn btn-sm btn-success">sort on ratings</button>    
    </div>
  <br>
<div ng-repeat="home in homes | orderBy:orderByPopularity:reverseSort">
  <div class="panel panel-primary  ">
    <div class="panel-heading">
      Home name: {{home.home_name}}
    </div>
      <div class="panel-body">
        <div class="panel panel-body">
          <table>
          <p>total counts:{{home.total_counts}}</p>
          <p>city:{{home.city}}</p>
          <p>Price:{{home.price}}</p>
          <div ng-repeat="rate in rating">
          <!--  looping inside ng-repeat rating is seprate data but has home id-->
            <div ng-if="rate.home_id==home.id">
            Home raintgs:{{rate.avg}}  
          </div>
        </div>
      </div>
    </div>
  </div>  
</div>

//My app.js code
var app = angular.module('plunker', []);
    app.controller('MainCtrl', function($scope) {
      $scope.homes=[{"id":"48","home_name":"Swastik","city":"Banglore","zipcode":"888888","total_counts":"1","price":"5000"},
    {"id":"49","home_name":"Khushboo","city":"Chennai","zipcode":"456786","total_counts":"17","price":"3333"},
    {"id":"50","home_name":"Raj","city":"Hydrabad","zipcode":"123455","total_counts":"2","price":"20000"}];
    $scope.orderByPopularity ='total_counts';
    $scope.reverseSort = true;
    $scope.rating=[{"home_id":"48","avg":"3.5"},
    {"home_id":"49","avg":"2"},
    {"home_id":"50","avg":"4"}
    ];
    });
//html代码
按总数排序
按价格排序
按评级排序

主页名称:{{Home.Home\u name} 总计数:{home.total_counts}

城市:{{home.city}

价格:{{home.Price}}

家庭raintgs:{rate.avg} //我的app.js代码 var app=angular.module('plunker',[]); 应用程序控制器('MainCtrl',函数($scope){ $scope.homes=[{“id”:“48”,“home_name”:“Swastik”,“city”:“Banglore”,“zipcode”:“888888”,“总数”:“1”,“价格”:“5000”}, {“id”:“49”,“家名”:“Khushboo”,“城市”:“钦奈”,“zipcode”:“456786”,“总数”:“17”,“价格”:“3333”}, {“id”:“50”,“家名”:“Raj”,“城市”:“Hydrabad”,“zipcode”:“123455”,“总数”:“2”,“价格”:“20000”}]; $scope.orderByPopularity='total_counts'; $scope.reverseSort=true; $scope.rating=[{“home_id”:“48”,“avg”:“3.5”}, {“home_id”:“49”,“avg”:“2”}, {“home_id”:“50”,“avg”:“4”} ]; });
它进行排序,但您的
总计数
值是字符串,因此它按字典顺序排列。如果您想按数字排序(我假设您是这样做的),则需要删除引号并将其值作为数字本身,即:
“总数”:17

编辑:修改后的值可以保留为字符串(在自定义排序函数中)

至于
avg
分级排序,您不能这样做,因为您的排序是在
$scope.homes
上进行的,并且此数组的对象没有
avg
属性,这是另一个数组的属性-
$scope.ratings
。 要按该属性排序,必须创建自己的自定义函数

$scope.myValueFunction = function(o) {

   if ($scope.orderByPopularity == "avg") {
     var obj;
     for (var i = 0; i < $scope.rating.length; i++) { 
        if ($scope.rating[i].home_id == o.id) {
          obj = $scope.rating[i]
        }
     }
     return obj.avg;
   }
   else  {
     return parseInt(o[$scope.orderByPopularity]); 
   }

};
$scope.myValueFunction=function(o){
如果($scope.orderByPopularity==“avg”){
var-obj;
对于(var i=0;i<$scope.rating.length;i++){
如果($scope.rating[i].home\u id==o.id){
obj=$scope.rating[i]
}
}
返回对象平均值;
}
否则{
返回parseInt(o[$scope.orderByPopularity]);
}
};
在HTML中:

<div ng-repeat="home in homes | orderBy:myValueFunction:reverseSort">


看看这个例子。

这是JSON数据,我不想修改太多的键值对,这就是IO问这个问题的原因。谢谢您的回复。@arunaangadi我修改了函数以处理您的原始JSON数据。Plunker也更新了。我看不到价格排序,先生?它应该排序3333 5000然后20000或20000,5000然后3333顺便说一句,投票给定制过滤器多好的想法,先生,请解决这两个问题,我会给你打分的。pls@arunaangadi正确,价格就像总计数一样,也应该使用
parseInt()
。看看更新后的答案。