【问题标题】:AngularJs Sorting across all the pagesAngularJs 对所有页面进行排序
【发布时间】:2015-08-04 16:07:23
【问题描述】:

当我使用服务器端分页和排序时,任何人都可以帮助我对所有页面进行 angularjs 排序。

我正在使用 ui-bootsrap 进行分页; 代码如附件。

我的排序只按升序进行一次。知道如何双向排序吗?即我将 sortBy 作为 + 属性传递给排序,一旦按 asc 顺序排序,我需要使用 - infront 切换属性。有任何指令可以处理该切换吗?

$scope.maxSize = 5;
 $scope.currentPage = 1;
 $scope.itemsPerPage = 5;

//This method gets called each time the page is loaded or move to next page

        $scope.isResultExist = function (list) {
            $scope.list = list;
            return  $scope.populateResult();
        };

  $scope.populateResult = function () {
            if ($scope.list != undefined) {
                $scope.totalItems = $scope.list.length;
                var begin = (($scope.currentPage - 1) * $scope.itemsPerPage)
                    , end = begin + $scope.itemsPerPage;

                $scope.result = $scope.list.slice(begin, end);
            }
        };

$scope.sort_by = function (sortBy) {
        if ($scope.list != undefined) {
            var sortOrder = 1;
            $log.debug("**************list : " + $scope.list);
            $scope.list.sort(function (a, b) {
                for (var k = 0; k < $scope.list.length; k++) {
                    var valueA = a[sortBy];
                    var valueB = b[sortBy];
                    var result = (valueA < valueB) ? -1 : (valueA > valueB) ? 1 : 0;
                    return result * sortOrder;
                }
            });
            $scope.populateResult();
        }
    };
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
<th class="source"><a href="#" ng-click="sort_by('source')" data-toggle="tooltip" bs-tooltip
                                          data-title="sort by Source ID">Source ID<i class="fa fa-sort"></i>
                    </a></th>

  <tr data-ng-repeat="keyRingItem in result ">

Pagination:

 <pagination items-per-page="itemsPerPage" total-items="totalItems" ng-model="currentPage"
                                max-size="maxSize" class="pagination-sm" boundary-links="true">
                    </pagination>

【问题讨论】:

    标签: angularjs sorting


    【解决方案1】:

    如果您的分页是在服务器端完成的,那么排序必须在服务器端完成。

    Angular 将只能对其拥有的数据页面进行排序。

    要么在服务器端实现排序,要么在客户端检索所有数据并实现分页。

    【讨论】:

    • 我的排序功能在服务器端。控制器 sort_by() : var sortOrder=1; $scope.list.sort(function (a, b){ for (var k = 0; k valueB) ? 1 : 0; 返回结果 * sortOrder; } }); $scope.populateResult(); //创建新的排序数组以按页面显示 } };
    • 排序函数$scope.sort_by 在您的代码示例中位于客户端。不是服务器端。
    【解决方案2】:
       $scope.propertyName = 'age';//Amol sorting angularjs
      $scope.reverse = true;
      $scope.Shiftsort = function(propertyName) {
        $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false;
        $scope.propertyName = propertyName;
      };
    
    
        angular.module('orderByExample2', [])
        .controller('ExampleController', ['$scope', function($scope) {
          var friends = [
            {name: 'John',   phone: '555-1212',  age: 10},
            {name: 'Mary',   phone: '555-9876',  age: 19},
            {name: 'Mike',   phone: '555-4321',  age: 21},
            {name: 'Adam',   phone: '555-5678',  age: 35},
            {name: 'Julie',  phone: '555-8765',  age: 29}
          ];
    
          $scope.propertyName = 'age';
          $scope.reverse = true;
          $scope.friends = friends;
    
          $scope.sortBy = function(propertyName) {
            $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false;
            $scope.propertyName = propertyName;
          };
        }]);
        .friends {
          border-collapse: collapse;
        }
    
        .friends th {
          border-bottom: 1px solid;
        }
        .friends td, .friends th {
          border-left: 1px solid;
          padding: 5px 10px;
        }
        .friends td:first-child, .friends th:first-child {
          border-left: none;
        }
    
        .sortorder:after {
          content: '\25b2';   // BLACK UP-POINTING TRIANGLE
        }
        .sortorder.reverse:after {
          content: '\25bc';   // BLACK DOWN-POINTING TRIANGLE
        }
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.0/angular.min.js"></script>
        <div ng-controller="ExampleController">
          <pre>Sort by = {{propertyName}}; reverse = {{reverse}}</pre>
          <hr/>
          <button ng-click="propertyName = null; reverse = false">Set to unsorted</button>
          <hr/>
          <table class="friends">
            <tr>
              <th>
                <button ng-click="sortBy('name')">Name</button>
                <span class="sortorder" ng-show="propertyName === 'name'" ng-class="{reverse: reverse}"></span>
              </th>
              <th>
                <button ng-click="sortBy('phone')">Phone Number</button>
                <span class="sortorder" ng-show="propertyName === 'phone'" ng-class="{reverse: reverse}"></span>
              </th>
              <th>
                <button ng-click="sortBy('age')">Age</button>
                <span class="sortorder" ng-show="propertyName === 'age'" ng-class="{reverse: reverse}"></span>
              </th>
            </tr>
            <tr ng-repeat="friend in friends | orderBy:propertyName:reverse">
              <td>{{friend.name}}</td>
              <td>{{friend.phone}}</td>
              <td>{{friend.age}}</td>
            </tr>
          </table>
        </div>

    【讨论】:

    • 请对您的回答进行详细解释,以便下一位用户更好地理解您的回答。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多