我们来讲解一下使用AngularJS和Bootstrap实现表格分页的完整攻略。
首先,我们需要明确一下,AngularJS是一个JavaScript框架,用于构建单页应用程序(Single Page Application),而Bootstrap是一套基于HTML、CSS和JS的开源前端框架,用于响应式设计和快速开发。
在使用AngularJS和Bootstrap实现表格分页之前,需要先引入以下库文件:
<!-- AngularJS核心库 -->
<script src="https://cdn.bootcss.com/angular.js/1.7.8/angular.min.js"></script>
<!-- Bootstrap样式库 -->
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!-- Bootstrap JavaScript库 -->
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
其次,我们需要定义一个AngularJS应用程序,并且定义一个控制器controller,用于处理分页的逻辑和数据绑定。示例代码如下:
<div ng-app="myApp" ng-controller="myCtrl">
<!-- 表格 -->
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="product in pagedItems">
<td>{{ product.id }}</td>
<td>{{ product.name }}</td>
<td>{{ product.price }}</td>
</tr>
</tbody>
</table>
<!-- 分页组件 -->
<ul uib-pagination total-items="totalItems" ng-model="currentPage" items-per-page="pageSize"></ul>
</div>
<script>
var app = angular.module('myApp', ['ui.bootstrap']);
app.controller('myCtrl', function($scope, $http) {
// 当前页数
$scope.currentPage = 1;
// 每页显示的记录数
$scope.pageSize = 10;
// 总记录数
$scope.totalItems = 0;
// 分页数据
$scope.pagedItems = [];
// 获取数据
$http.get('data.json').then(function(response) {
$scope.items = response.data;
// 更新总记录数
$scope.totalItems = $scope.items.length;
// 计算总页数
$scope.totalPages = Math.ceil($scope.totalItems / $scope.pageSize);
// 初始化分页数据
$scope.pagedItems = $scope.items.slice(0, $scope.pageSize);
});
// 监听分页变化
$scope.$watch('currentPage + pageSize', function() {
var start = ($scope.currentPage - 1) * $scope.pageSize;
var end = start + $scope.pageSize;
$scope.pagedItems = $scope.items.slice(start, end);
});
});
</script>
在这个示例代码中,定义了一个名为myApp
的AngularJS应用程序,并定义了一个控制器myCtrl
,并且在HTML页面中使用了分页组件。
在控制器中,首先定义了一些变量,如当前页数、每页显示的记录数、总记录数、分页数据等,在获取数据之后,计算总页数,初始化分页数据。同时,监听分页变化时,根据页数和每页显示的记录数进行数据分页。
示例1:
在上面的代码中,我们从data.json中获取数据,实际开发中我们可能是从后端接口获取数据,这个接口可能会返回分页数据,也可能返回所有的数据。如果返回分页数据,则可以直接使用,不需要计算总记录数和总页数;如果返回所有数据,则需要手动进行分页处理。示例代码如下:
<div ng-app="myApp" ng-controller="myCtrl">
<!-- 表格 -->
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="product in pagedItems">
<td>{{ product.id }}</td>
<td>{{ product.name }}</td>
<td>{{ product.price }}</td>
</tr>
</tbody>
</table>
<!-- 分页组件 -->
<ul uib-pagination total-items="totalItems" ng-model="currentPage" items-per-page="pageSize"></ul>
</div>
<script>
var app = angular.module('myApp', ['ui.bootstrap']);
app.controller('myCtrl', function($scope, $http) {
// 当前页数
$scope.currentPage = 1;
// 每页显示的记录数
$scope.pageSize = 10;
// 总记录数
$scope.totalItems = 0;
// 分页数据
$scope.pagedItems = [];
// 获取数据
$http.get('data.json').then(function(response) {
$scope.items = response.data;
// 如果返回分页数据,则直接使用
if (response.config.url.indexOf('page') !== -1) {
$scope.pagedItems = $scope.items;
} else {
// 如果返回所有数据,则手动进行分页处理
$scope.totalItems = $scope.items.length;
$scope.totalPages = Math.ceil($scope.totalItems / $scope.pageSize);
$scope.pagedItems = $scope.items.slice(0, $scope.pageSize);
}
});
// 监听分页变化
$scope.$watch('currentPage + pageSize', function() {
var start = ($scope.currentPage - 1) * $scope.pageSize;
var end = start + $scope.pageSize;
$scope.pagedItems = $scope.items.slice(start, end);
});
});
</script>
在这个示例代码中,我们通过判断返回的数据是否为分页数据来进行分页处理。
示例2:
在上面的代码中,我们使用了分页组件uib-pagination
来实现分页功能,这个组件是由AngularUI团队实现的一个Bootstrap分页组件。实际开发中,我们可能需要自己实现一个分页组件,参考示例代码如下:
<div ng-app="myApp" ng-controller="myCtrl">
<!-- 表格 -->
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="product in pagedItems">
<td>{{ product.id }}</td>
<td>{{ product.name }}</td>
<td>{{ product.price }}</td>
</tr>
</tbody>
</table>
<!-- 分页组件 -->
<ul class="pagination">
<li ng-class="{disabled: currentPage == 1}">
<a href="#" ng-click="setCurrentPage(1)">首页</a>
</li>
<li ng-class="{disabled: currentPage == 1}">
<a href="#" ng-click="setCurrentPage(currentPage - 1)">上一页</a>
</li>
<li ng-repeat="page in pageItems track by $index" ng-class="{active: page == currentPage}">
<a href="#" ng-click="setCurrentPage(page)">{{ page }}</a>
</li>
<li ng-class="{disabled: currentPage == totalPages}">
<a href="#" ng-click="setCurrentPage(currentPage + 1)">下一页</a>
</li>
<li ng-class="{disabled: currentPage == totalPages}">
<a href="#" ng-click="setCurrentPage(totalPages)">末页</a>
</li>
</ul>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
// 当前页数
$scope.currentPage = 1;
// 每页显示的记录数
$scope.pageSize = 10;
// 总记录数
$scope.totalItems = 0;
// 分页数据
$scope.pagedItems = [];
// 总页数
$scope.totalPages = 0;
// 页码列表
$scope.pageItems = [];
// 获取数据
$http.get('data.json').then(function(response) {
$scope.items = response.data;
$scope.totalItems = $scope.items.length;
$scope.totalPages = Math.ceil($scope.totalItems / $scope.pageSize);
$scope.pageItems = Array.from(Array($scope.totalPages), (_, x) => x + 1);
$scope.pagedItems = $scope.items.slice(0, $scope.pageSize);
});
// 切换页码
$scope.setCurrentPage = function(page) {
if (page < 1 || page > $scope.totalPages) {
return;
}
$scope.currentPage = page;
var start = ($scope.currentPage - 1) * $scope.pageSize;
var end = start + $scope.pageSize;
$scope.pagedItems = $scope.items.slice(start, end);
};
});
</script>
在这个示例代码中,我们自定义了一个分页组件,使用了ng-class指令来动态设置样式类,使用ng-repeat指令来生成页码列表,并使用setCurrentPage函数来切换页码和切换数据。
以上就是使用AngularJS和Bootstrap实现表格分页的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:AngularJS 与Bootstrap实现表格分页实例代码 - Python技术站