1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/buyongfeng-ngpager

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 6.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 14.03.2025 08:44 659e57d

Реализация пагинации с использованием Angular + Bootstrap

Описание

Реализация пагинации с использованием AngularJS. Отображает 9 страниц.

Базовая конфигурация

  • Версия Angular 1.5
  • Ng-инструкции
  • Bootstrap 3

Область действия ng-инструкций

Создание изолированного scope в directive

Для создания изолированного scope достаточно определить свойство scope внутри directive:

app.directive('isolatedScope', function () {
    return {
        scope: {},
        ...
    };
});

Взаимодействие изолированного scope с родительским scope

  • @ — однонаправленная связь (обычно используется для строковых значений)
  • = — двунаправленная связь (обычно используется для объектов)
  • & — позволяет directive выполнить выражение в родительском scope

Пример использования

Код компонента

Directive

module.directive('bootPager', [function() {
    return {
        scope: {
            pobj: '='
        },
        restrict: 'EA',
        templateUrl: 'Pager.html',
        link: function($scope, iElm, iAttrs, controller) {
            $scope.selectPage = function(page) {
                // проверка на корректность значения
                if (page < 1 || page > $scope.pages) return;

                // отображение 9 страниц (начиная со 5-ой страницы)
                if (page > 5) {
                    var newpageList = [];
                    for (var i = (page - 5); i < ((page + 4) > $scope.pages ? $scope.pages : (page + 4)); i++) {
                        newpageList.push(i + 1);
                    }
                    $scope.pageList = newpageList;
                } else {
                    var newpageList = [];
                    for (var i = 0; i < $scope.newPages; i++) {
                        newpageList.push(i + 1);
                    }
                    $scope.pageList = newpageList;
                }
            };
        }
    };
}]);
``````javascript
$scope.pobj.index = page;
$scope.isActivePage(page);

Текст уже на русском языке, поэтому изменения не требуются.```md // Установка активной страницы $scope.isActivePage = function(page) { return $scope.pobj.index === page; }; } ]; }]);

                    // Предыдущая страница
                     $scope.Previous = function() {
                         $scope.selectPage($scope.pobj.index - 1);
                     }
                         // Следующая страница
                     $scope.Next = function() {
                         $scope.selectPage($scope.pobj.index + 1);
                     };
                 },
                 controller: ['$scope', function($scope) {
                     // Обычное наблюдение за изменениями (инициализация один раз, обычно меняется один раз)
                     $scope.$watch('pobj.count', function(newValue, oldValue){
                         if ($scope.pobj.index == 1 && $scope.pobj.items && $scope.pobj.items.length > 0) {
                             $scope.pageSize = 10;
                             // Количество страниц
                             $scope.pages = Math.ceil($scope.pobj.count / $scope.pageSize);
                             $scope.newPages = $scope.pages > 9 ? 9 : $scope.pages;
                             $scope.pageList = [];
                             // Массив номеров страниц
                             for (var i = 0; i < $scope.newPages; i++) {
                                 $scope.pageList.push(i + 1);
                             }
                         }
                     }, true);
                 }]
             };
         }]);
       ```
       - htmlTemplate
       ```
         <nav style="cursor:pointer;text-align:center;">
             <ul class="pagination">
                 <li>
                     <a ng-click="selectPage(1)">
                         <span>Первая страница</span>
                     </a>
                 </li>
                 <li>
                     <a ng-click="Previous()">
                         <span>Предыдущая страница</span>
                     </a>
                 </li>
                 <li ng-repeat="page in pageList" ng-class="{active: isActivePage(page)}">
``````markdown
                    <a ng-click="selectPage(page)">{{ page }}</a>
                 </li>
                 <li>
                     <a ng-click="next()">
                         <span>Следующая страница</span>
                     </a>
                 </li>
                 <li>
                     <a ng-click="selectPage(pages)">
                         <span>Последняя страница</span>
                     </a>
                 </li>
             </ul>
         </nav>
       ```
   * Пример использования кода
```      
         <boot-pager pobj="pobj">
          </boot-pager>
       ```
       - js
         ```  
         angular.module('app', [])
         .controller('testController', ['$scope', '$http', function($scope, $http) {
             // Инициализация
             $scope.pobj = {
                 items: [],
                 count: 0,
                 index: 1
             };
             // Получение данных с сервера
             $scope.$watch('pobj.index', function(nValue, oValue) {
                 console.log($scope.pobj.index);
                 if ($scope.pobj.index > 0) {
                     $http.get('Service.js').then(function(res) {
                         $scope.pobj.items = res.data.records.slice(($scope.pobj.index - 1) * 10, ($scope.pobj.index - 1) * 10 + 10);
                         $scope.pobj.count = res.data.records.length;
                     });
                 }
             }, true);
         }]);
         ```

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/buyongfeng-ngpager.git
git@api.gitlife.ru:oschina-mirror/buyongfeng-ngpager.git
oschina-mirror
buyongfeng-ngpager
buyongfeng-ngpager
master