Реализация пагинации с использованием AngularJS. Отображает 9 страниц.
Для создания изолированного scope достаточно определить свойство scope
внутри directive:
app.directive('isolatedScope', function () {
return {
scope: {},
...
};
});
@
— однонаправленная связь (обычно используется для строковых значений)=
— двунаправленная связь (обычно используется для объектов)&
— позволяет directive выполнить выражение в родительском scopemodule.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 )