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>&copy; 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新建多桌面切换操作【技巧】  中国移动官方网站首页入口 中国移动官网网页登录  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?