Как отобразить общее количество записей с помощью смарт-таблицы в AngularJS

Я использую смарт-таблицу для отображения записей. Использование пользовательской пагинации для отображения 20 записей на странице.

Я хочу отобразить нумерацию страниц следующим образом: 1-20 из 25 записей Как мне это сделать? - Я пытался использовать (количество страниц * общее количество страниц), но это округлит результат.


person shan    schedule 04.08.2015    source источник
comment
Ссылка на код — plnkr.co/edit/zk6PLwJIaaQysGAyXHic   -  person shan    schedule 05.08.2015
comment
Не могли бы вы опубликовать свой код в своем вопросе, пожалуйста, иначе этот вопрос станет бесполезным для всех, если ваша ссылка не работает.   -  person Caltor    schedule 05.08.2015


Ответы (4)


Вы можете использовать totalItemCount, который находится внутри tableState.pagination. Просто заполните это значение после получения данных с сервера и используйте это значение в шаблоне разбиения на страницы.

person user1897692    schedule 04.08.2015
comment
Благодарю вас! Это то, что мне было нужно. Я могу установить общее количество записей в tableState.pagination.totalItemCount и получить к нему доступ в моем html-коде разбивки на страницы, например {{totalItemCount}}. Спасибо еще раз. - person shan; 05.08.2015

Вдохновленный ответом dhiraj tiwari, часы не будут работать, если они не будут обернуты вызовом функции:

  .directive('stPaginationSummary', function () {
    return {
      restrict: 'E',
      require: '^stTable',
      template: '<span>Showing <strong>{{from}}</strong>-<strong>{{to}}</strong> of <strong>{{total}}</strong> Record(s)</span>',
      scope: {},
      link: function (scope, element, attr, ctrl) {
        var listener = function () {
          var pagination = ctrl.tableState().pagination
          scope.from = pagination.totalItemCount === 0 ? 0 : pagination.start + 1
          scope.to = Math.min(pagination.start + pagination.number, pagination.totalItemCount)
          scope.total = pagination.totalItemCount
        }
        scope.$watch(function () {
          return ctrl.tableState()
        }, listener, true)
      }
    }
  })
person Luke Hutton    schedule 02.04.2019

Я нашел это решение моей проблемы. Я знаю, что это старая проблема, но чтобы сделать ее более полезной для других, я хотел показать, как сделать это решение еще лучше.

Ответ, который вы дали, верен на первой и последующих страницах, но не всегда на последней.

Вы делаете это так:

<span class="pagination-info itemCount">
     {{(currentPage-1)*stItemsByPage+1}}-
     {{currentPage*stItemsByPage}} 
     of {{numPages*stItemsByPage}} Records
</span>

Если количество записей на последней странице меньше, чем stItemsByPage, оно никогда не будет правильным. В таком случае будет лучше:

<span class="pagination-info itemCount">
     {{(currentPage-1)*stItemsByPage+1}}-
     {{(currentPage*stItemsByPage) > totalItemCount?totalItemCount:(currentPage*stItemsByPage)}} 
     of {{numPages*stItemsByPage}} Records
</span>
person user3193324    schedule 12.07.2016

Прежде всего, вы должны создать директиву

ticketsApp.directive('stSummary', function () {

    return {
    restrict: 'E',
    require: '^stTable',
    template:'<span><b>[[pagination.start ]]  of [[pagination.totalItemCount]] items</b></span>',
    scope: {},
    link: function (scope, element, attr, ctrl) {
      var listener = function (val) {
        scope.pagination = ctrl.tableState().pagination;
        scope.to = Math.min(scope.pagination.start + scope.pagination.number, scope.total || 0);
      };
      scope.$watch(ctrl.tableState(), listener, true);
    }
  }
});`

После этого вы должны использовать тег «stSummary» в своем представлении. Бывший :

<st-summary st-items-by-page="10" 
            class="pull-right"
            class="pagination-info itemCountnumber">
</st-summary>` 
person dhiraj tiwari    schedule 04.07.2017