【问题标题】:How can I sort a column based on previous column in angularjs如何根据angularjs中的前一列对列进行排序
【发布时间】:2015-03-16 16:53:08
【问题描述】:

我想对链接的两列进行排序示例:我对名称进行排序,然后我想按日期对名称列表进行排序,但是,当我这样做时,它会覆盖我的排序并按日期排序忽略按名称排序,

是否可以按名称对日期进行排序?当你点击一个标题? 如果有人可以给我一个提示吗?

$scope.filteredList =null;
$scope.orderByName = function(predicate,reverse){
    if($scope.filteredList == null) {
        $scope.dataList = $filter("orderBy")($scope.dataList, predicate, reverse);
        $scope.filteredList =  $scope.dataList;
    }
    else{
    $scope.dataList = $filter("orderBy")($scope.filteredList,predicate,reverse);
    $scope.filteredList =  $scope.dataList;
    }

};
$scope.orderByDate = function(predicate,reverse){
    if($scope.filteredList == null){
        $scope.dataList = $filter("orderBy")($scope.dataList,predicate,reverse);
        $scope.filteredList =  $scope.companyInfo;
    }
    else{
        $scope.companyInfo = $filter("orderBy")($scope.filteredList,predicate,reverse);
        $scope.filteredList =  $scope.dataList;
    }
};

HTML:

<a ng-click="reverse=!reverse;orderByName('date',reverse)">
<a ng-click="reverse=!reverse;orderByDate('name',reverse)">

这是我正在使用的代码,但每次我单击任何列时,它都会重新对数据进行排序..

【问题讨论】:

    标签: angularjs filter sql-order-by


    【解决方案1】:

    您可能希望按功能编写自己的订单。您的 html 可能如下所示:

     ng-repeat="employee in employees | orderBy:mySortFunction"
    

    在你的函数中,你可以这样写:

     $scope.mySortFunction = function(employee) {
        return employee.name + '~' + employee.date;
     };
    

    在你的情况下,下面的代码应该可以工作:

    $scope.filteredList =null;
    $scope.orderByName = function(predicate,reverse){
        $scope.sortedOnName = true;
        if($scope.filteredList == null) {
            $scope.dataList = $filter("orderBy")($scope.dataList, predicate, reverse);
            $scope.filteredList =  $scope.dataList;
        }
        else{
        $scope.dataList = $filter("orderBy")($scope.filteredList,predicate,reverse);
        $scope.filteredList =  $scope.dataList;
        }
    
    };
    
     $scope.mySortFunction = function(dataListElement) {
        return dataListElement.name + '~' + dataListElement.date;
     };
    
    $scope.orderByDate = function(predicate,reverse){
        if ($scope.sortedOnName){
          if($scope.filteredList == null){
              $scope.dataList = $filter("orderBy")($scope.dataList,$scope.mySortFunction,reverse);
              $scope.filteredList =  $scope.companyInfo;
          }
          else{
              $scope.companyInfo = $filter("orderBy")($scope.filteredList,$scope.mySortFunction,reverse);
              $scope.filteredList =  $scope.dataList;
          }
        }
        else {
          if($scope.filteredList == null){
              $scope.dataList = $filter("orderBy")($scope.dataList,predicate,reverse);
              $scope.filteredList =  $scope.companyInfo;
          }
          else{
              $scope.companyInfo = $filter("orderBy")($scope.filteredList,predicate,reverse);
              $scope.filteredList =  $scope.dataList;
          }
        }
    };
    

    理论上应该,但如果您进行了一些更正以使其正常工作,请告诉我,以便我可以更新答案。

    【讨论】:

    • 嗨 Anshman,我已经尝试过以下方法: $scope.orderByName = function(predicate,reverse){ if($scope.filteredList == null) { $scope.ListInfo = $filter(" orderBy")($scope.ListInfo, 谓词, 反向); $scope.filteredList = $scope.ListInfo; } else{ $scope.companyInfo = $filter("orderBy")($scope.filteredList,predicate,reverse); $scope.filteredList = $scope.ListInfo; } 这应该对我的数据进行双向排序,
    • 它是一个表,有 2 列,当我点击名称时,它会被排序,然后当我点击日期时,日期应该根据名称排序,它不应该改变结果再次出现,这就是我正在尝试做的我在 ng-onclick 上实现它
    • 您能否将您的代码放在您的问题中,这样更具可读性。我会先尝试了解您的问题
    • 你有什么解决办法吗?我做错什么了吗?
    • 嗨 Anshuman 感谢您的帮助,它仍然是一样的,当我尝试对名称和日期进行排序时,它再次对所有表进行排序并忽略排序的名称列,我想排序一个列,然后将其冻结,然后根据冻结列对另一列进行排序。但不确定出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多