Vue.js结合bootstrap实现分页控件
发布时间 - 2026-01-11 00:05:53 点击率:次本文为大家分享了使用vue.js结合bootstrap 开发的分页控件,供大家参考,具体内容如下

效果如下
实现代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title> Vue-PagerTest</title>
<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.css" />
</head>
<body>
<div class="container body-content">
<div id="test" class="form-group">
<div class="form-group">
<div class="page-header">
数据
</div>
<table class="table table-bordered table-responsive table-striped">
<tr>
<th>姓名</th>
<th>年龄</th>
<th>删除信息</th>
</tr>
<tr v-for="item in arrayData">
<td class="text-center">{{item.name}}</td>
<td>{{item.age}}</td>
<td><a href="javascript:void(0)" rel="external nofollow" v-on:click="deleteItem($index,item.age)">del</a></td>
</tr>
</table>
<div class="page-header">分页</div>
<div class="pager" id="pager">
<span class="form-inline">
<select class="form-control" v-model="pagesize" v-on:change="showPage(pageCurrent,$event,true)" number>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="40">40</option>
</select>
</span>
<template v-for="item in pageCount+1">
<span v-if="item==1" class="btn btn-default" v-on:click="showPage(1,$event)">
首页
</span>
<span v-if="item==1" class="btn btn-default" v-on:click="showPage(pageCurrent-1,$event)">
上一页
</span>
<span v-if="item==1" class="btn btn-default" v-on:click="showPage(item,$event)" v-bind:class="item==pageCurrent?'active':''">
{{item}}
</span>
<span v-if="item==1&&item<showPagesStart-1" class="btn btn-default disabled">
...
</span>
<span v-if="item>1&&item<=pageCount-1&&item>=showPagesStart&&item<=showPageEnd&&item<=pageCount" class="btn btn-default" v-on:click="showPage(item,$event)" <span style="font-family: Arial, Helvetica, sans-serif;"> v-bind:class="item==pageCurrent?'active':''"</span><span style="font-family: Arial, Helvetica, sans-serif;">></span>
{{item}}
</span>
<span v-if="item==pageCount&&item>showPageEnd+1" class="btn btn-default disabled">
...
</span>
<span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(item,$event)" <span style="font-family: Arial, Helvetica, sans-serif;">v-bind:class="item==pageCurrent?'active':''"</span><span style="font-family: Arial, Helvetica, sans-serif;">></span>
{{item}}
</span>
<span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(pageCurrent+1,$event)">
下一页
</span>
<span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(pageCount,$event)">
尾页
</span>
</template>
<span class="form-inline">
<input class="pageIndex form-control" style="width:60px;text-align:center" type="text" v-model="pageCurrent | onlyNumeric" v-on:keyup.enter="showPage(pageCurrent,$event,true)" />
</span>
<span>{{pageCurrent}}/{{pageCount}}</span>
</div>
</div>
</div>
<hr />
<footer>
<p>© 2016 - 笑问苍天丶</p>
</footer>
</div>
<script src="/lib/jquery/dist/jquery.js"></script>
<script src="/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="/lib/vue.js"></script>
<script>
//只能输入正整数过滤器
Vue.filter('onlyNumeric', {
// model -> view
// 在更新 `<input>` 元素之前格式化值
read: function (val) {
return val;
},
// view -> model
// 在写回数据之前格式化值
write: function (val, oldVal) {
var number = +val.replace(/[^\d]/g, '')
return isNaN(number) ? 1 : parseFloat(number.toFixed(2))
}
})
//数组删除某项功能
Array.prototype.remove = function (dx) {
if (isNaN(dx) || dx > this.length) { return false; }
for (var i = 0, n = 0; i < this.length; i++) {
if (this[i] != this[dx]) {
this[n++] = this[i]
}
}
this.length -= 1
}
var vue = new Vue({
el: "#test",
data: {
//总项目数
totalCount: 200,
//分页数
pageCount: 20,
//当前页面
pageCurrent: 1,
//分页大小
pagesize: 10,
//显示分页按钮数
showPages: 11,
//开始显示的分页按钮
showPagesStart: 1,
//结束显示的分页按钮
showPageEnd: 100,
//分页数据
arrayData: []
},
methods: {
//分页方法
showPage: function (pageIndex, $event, forceRefresh) {
if (pageIndex > 0) {
if (pageIndex > this.pageCount) {
pageIndex = this.pageCount;
}
//判断数据是否需要更新
var currentPageCount = Math.ceil(this.totalCount / this.pagesize);
if (currentPageCount != this.pageCount) {
pageIndex = 1;
this.pageCount = currentPageCount;
}
else if (this.pageCurrent == pageIndex && currentPageCount == this.pageCount && typeof (forceRefresh) == "undefined") {
console.log("not refresh");
return;
}
//测试数据 随机生成的
var newPageInfo = [];
for (var i = 0; i < this.pagesize; i++) {
newPageInfo[newPageInfo.length] = {
name: "test" + (i + (pageIndex - 1) * 20),
age: (i + (pageIndex - 1) * 20)
};
}
this.pageCurrent = pageIndex;
this.arrayData = newPageInfo;
//计算分页按钮数据
if (this.pageCount > this.showPages) {
if (pageIndex <= (this.showPages - 1) / 2) {
this.showPagesStart = 1;
this.showPageEnd = this.showPages - 1;
console.log("showPage1")
}
else if (pageIndex >= this.pageCount - (this.showPages - 3) / 2) {
this.showPagesStart = this.pageCount - this.showPages + 2;
this.showPageEnd = this.pageCount;
console.log("showPage2")
}
else {
console.log("showPage3")
this.showPagesStart = pageIndex - (this.showPages - 3) / 2;
this.showPageEnd = pageIndex + (this.showPages - 3) / 2;
}
}
console.log("showPagesStart:" + this.showPagesStart + ",showPageEnd:" + this.showPageEnd + ",pageIndex:" + pageIndex);
}
}
, deleteItem: function (index, age) {
if (confirm('确定要删除吗')) {
//console.log(index, age);
var newArray = [];
for (var i = 0; i < this.arrayData.length; i++) {
if (i != index) {
newArray[newArray.length] = this.arrayData[i];
}
}
this.arrayData = newArray;
}
}
}
});
vue.$watch("arrayData", function (value) {
//console.log("==============arrayData begin==============");
//console.log(value==vue.arrayData);
//console.log(vue.arrayData);
//console.log("==============arrayData end==============");
});
vue.showPage(vue.pageCurrent, null, true);
</script>
</body>
</html>
源码下载: bootstrap分页控件
参考资料: Vue.js官网
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Vue.js
# bootstrap
# 分页控件
# JavaScript实现前端分页控件
# angularjs实现的前端分页控件示例
# 基于JS分页控件实现简单美观仿淘宝分页按钮效果
# ANGULARJS中使用JQUERY分页控件
# JS分页控件 可用于无刷新分页
# 原生JS实现分页点击控件
# 分页
# 下一页
# 上一页
# 尾页
# 参考资料
# 大家分享
# 首页
# 具体内容
# 官网
# 大家多多
# 源码下载
# 某项
# 笑问
# 测试数据
# 正整数
# tr
# striped
# bordered
# responsive
# td
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
高端企业智能建站程序:SEO优化与响应式模板定制开发
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel如何实现数据库事务?(DB Facade示例)
Linux系统命令中screen命令详解
MySQL查询结果复制到新表的方法(更新、插入)
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
如何用PHP工具快速搭建高效网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
七夕网站制作视频,七夕大促活动怎么报名?
JavaScript如何实现错误处理_try...catch如何捕获异常?
html5的keygen标签为什么废弃_替代方案说明【解答】
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
Python高阶函数应用_函数作为参数说明【指导】
详解Android中Activity的四大启动模式实验简述
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
javascript中闭包概念与用法深入理解
网站图片在线制作软件,怎么在图片上做链接?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
javascript中对象的定义、使用以及对象和原型链操作小结
如何构建满足综合性能需求的优质建站方案?
如何快速查询网址的建站时间与历史轨迹?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
Python并发异常传播_错误处理解析【教程】
如何快速搭建虚拟主机网站?新手必看指南
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
高端智能建站公司优选:品牌定制与SEO优化一站式服务
网站建设要注意的标准 促进网站用户好感度!
音响网站制作视频教程,隆霸音响官方网站?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何在Ubuntu系统下快速搭建WordPress个人网站?
Linux后台任务运行方法_nohup与&使用技巧【技巧】
英语简历制作免费网站推荐,如何将简历翻译成英文?
在Oracle关闭情况下如何修改spfile的参数
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
android nfc常用标签读取总结
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
个人摄影网站制作流程,摄影爱好者都去什么网站?
JavaScript常见的五种数组去重的方式
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
*服务器网站为何频现安全漏洞?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
中国移动官方网站首页入口 中国移动官网网页登录
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?

