一、在components文件夹下新建 pagination.vue

  1. <template>
  2. <div class="page-wrap">
  3. <ul>
  4. <li class="li-page" :plain="true" @click="goPrePage">&laquo;</li>
  5. <li v-for="(i, index) in showPageBtn" :key="index"
  6. :class="{active: i === currentPage, pointer: i, hover: i && i !== currentPage}" @click="pageOffset(i)">
  7. <a v-if="i">{{i}}</a>
  8. <a v-else>···</a>
  9. </li>
  10. <li class="li-page" :plain="true" @click="goNextPage">&raquo;</li>
  11. </ul>
  12. </div>
  13. </template>
  14.  
  15. <script>
  16. export default {
  17. name: "pagination",
  18. props: {
  19. num: Number,
  20. limit: Number
  21. },
  22. data: () => ({
  23. offset: 0
  24. }),
  25. computed: {
  26. prePage() {
  27. return this.offset !== 0 && this.num;
  28. },
  29. nextPage() {
  30. return (this.offset + this.limit < this.num) && this.num
  31. },
  32. totalPage() {
  33. return Math.ceil(this.num / this.limit)
  34. },
  35. currentPage() {
  36. return Math.ceil(this.offset / this.limit) + 1
  37. },
  38. showPageBtn() {
  39. const pageNum = this.totalPage;
  40. const index = this.currentPage;
  41. if (pageNum <= 5) return [...new Array(pageNum)].map((v, i) => i + 1);
  42. if (index <= 2) return [1, 2, 3, 0, pageNum];
  43. if (index >= pageNum - 1) return [1, 0, pageNum - 2, pageNum - 1, pageNum];
  44. if (index === 3) return [1, 2, 3, 4, 0, pageNum];
  45. if (index === pageNum - 2) return [1, 0, pageNum - 3, pageNum - 2, pageNum - 1, pageNum];
  46. return [1, 0, index - 1, index, index + 1, 0, pageNum]
  47. }
  48. },
  49. methods: {
  50. pageOffset(i) {
  51. if (i === 0 || i === this.currentPage) return;
  52. this.offset = (i - 1) * this.limit;
  53. this.$emit('getNew', this.offset);
  54. },
  55. goPrePage() {
  56. if (!this.prePage) {
  57. // alert("这里是第一页呀,亲!");
  58. this.$message({
  59. showClose: true,
  60. message: '这是第一页哦!',
  61. type: 'warning'
  62. });
  63. return;
  64. }
  65. this.offset -= this.limit;
  66. this.$emit('getNew', this.offset);
  67. },
  68. goNextPage() {
  69. if (!this.nextPage) {
  70. // alert("已经是最后一页了呢~");
  71. this.$message({
  72. showClose: true,
  73. message: '这是最后一页啦!',
  74. type: 'warning'
  75. });
  76. return;
  77. }
  78. this.offset += this.limit;
  79. this.$emit('getNew', this.offset);
  80. }
  81. }
  82. }
  83.  
  84. </script>
  85.  
  86. <style scoped>
  87. .li-page {
  88. /* line-height: 25px; */
  89. cursor: pointer;
  90. color: #505362;
  91. background-color: #f4f4f5;
  92. }
  93.  
  94. .active {
  95. border-color: #0C9F9A;
  96. background-color: #0C9F9A;
  97. }
  98.  
  99. .pointer {
  100. cursor: pointer;
  101. }
  102.  
  103. .hover {
  104. color: #FFF;
  105. background-color: #FFF;
  106. }
  107.  
  108. .active a {
  109. color: #FFF;
  110. }
  111.  
  112. .page-wrap {
  113. font-size: 14px;
  114. margin-top: 10px;
  115. text-align: center;
  116. }
  117.  
  118. .page-wrap ul {
  119. display: inline-block;
  120. list-style: none;
  121. overflow: hidden;
  122. padding-inline-start: 0px;
  123. }
  124.  
  125. .page-wrap li {
  126. float: left;
  127. color: #505362;
  128. padding: 10px 17px;
  129. margin: 0 5px;
  130. border-radius: 3px;
  131. user-select: none;
  132. border: 1px solid transparent;
  133. }
  134.  
  135. </style>

二、在需要分页的页面引入组件

  1. <script>
  2. import pagination from "../../components/pagination.vue"
  3. export default {
  4. components: {
  5. pagination
  6. },
  7. data(){
  8. return {
  9. numpage: 0,
  10. limit: 10,
  11. currentList: [],
  12. list:[{
  13. name:'dsa',id:1
  14. },{
  15. name:'dsa',id:2
  16. },{
  17. name:'dsa',id:3
  18. },]
  19. }
  20. },
  21.  
  22. mounted() {
  23. this.getNew(0);
  24. this.numpage = this.list.length;
  25. },
  26. methods:{
  27. // 分页
  28. getNew(value) {
  29. this.currentList = this.list.slice(value, value + this.limit);
  30. },
  31.  
  32. }
  33. }
  34. </script>

三、将组件引入到页面使用

  1. <div>
  2. <!-- 分页 -->
  3. <pagination :num="numpage" :limit="limit" @getNew="getNew"></pagination>
  4. </div>

好啦,一个分页组件就这么封装好啦!

  1. /********
  2. *
  3. * .-~~~~~~~~~-._ _.-~~~~~~~~~-.
  4. * __.' 欢迎访问 ~. .~ `.__
  5. * .'// 我的博客 \./ ☞ 送你小 ☜ \\`.
  6. * .'// | \\`.
  7. * .'// .-~"""""""~~~~-._ | _,-~~~~"""""""~-. \\`.
  8. * .'//.-" `-. | .-' "-.\\`.
  9. * .'//______.============-.. \ | / ..-============.______\\`.
  10. * .'______________________________\|/______________________________`.
  11. */

vue 单独封装分页组件的更多相关文章

  1. 基于Vue封装分页组件

    使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} ...

  2. vue 封装分页组件

    分页 一般都是调接口, 接口为这种格式 {code: 0, msg: "success",…} code:0 data:{ content:[{content: "11& ...

  3. vue封装分页组件

    element提供的分页是已经封装好的组件,在这里再次封装是为了避免每个用到分页的页面点击跳转时都要写一遍跳转请求 分页组件 <!--分页组件--> <template> &l ...

  4. Vue 实现一个分页组件

    实现分页组件要分三个部分 样式,逻辑,和引用 首先新建一个vue文件用来承载组件内容 第一步:构建样式 <template> <nav> <ul class=" ...

  5. vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)

    文章目录 1.看实现的效果 2.前端vue页面核心代码 2.1. 表格代码(表格样式可以去elementui组件库直接调用相应的) 2.2.分页组件代码 2.3 .script中的代码 3.后端核心代 ...

  6. Vue自行封装常用组件-弹出框

    使用方法: 1.在父组件中引入"box.vue" //import popUpBox from "./box.vue";   2.在父组件中注册 popUpBo ...

  7. Vue 数组封装和组件data定义为函数一些猜测

     数组封装 var vm={ list:[0,1] } var push=vm.list.push;//把数组原来的方法存起来 vm.list.push=function(arg){//重新定义数组的 ...

  8. Vue文件封装日历组件

    封装就是要具有灵活性,样式自适应,调用的时候传入props就可以变成自己想要的样式. 效果展示网址:https://1963331542.github.io/ 源代码: <template> ...

  9. Vue中封装axios组件实例

    首先要创建一个网络模块network文件夹  里面要写封装好的几个组件 在config.js里面这样写 在index.js要这样写 core.js文件里面内容如下 然后要在main.js文件里面要设置 ...

  10. [ vue ] Quasar封装q-dialog组件,在外层实现弹出框的开启和关闭

    场景描述: 见:https://www.cnblogs.com/remly/p/12981582.html 具体实现: <!-- 父组件 --> <template> < ...

随机推荐

  1. WPF开发经验-实现Win10虚拟触摸键盘

    一 引入 项目有个需求,需要实现纯触控操作进行键盘输入.项目部署在Win10系统上,考虑有两种方案来实现. 通过调用Win10自带的触摸键盘来实现: 通过WPF实现一个触摸键盘来实现: 二 调用Win ...

  2. 【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race

    一.开发背景 你好,我是 @马哥python说 ,这是我用Python开发的全球疫情动态条形图,演示效果: https://www.zhihu.com/zvideo/15603276220259696 ...

  3. SpringMvc(五) - 支付宝沙箱和关键字过滤,md5加密,SSM项目重要知识点

    1.支付宝沙箱 1.1 jar包 alipay-sdk <!-- alipay-sdk --> <dependency> <groupId>com.alipay.s ...

  4. Docker容器虚拟化

    Docker容器虚拟化 目录 Docker容器虚拟化 虚拟化网络 单节点容器间通信 不同节点容器间通信 虚拟化网络 Network Namespace 是 Linux 内核提供的功能,是实现网络虚拟化 ...

  5. Linux-->vi和vim编辑器的基本操作

    vim编辑器介绍 vi或者vim就是对linux下的文本进行编辑的一种编辑器比如说a.cpp文件这种 Linux会内置vi文本编辑器 Vim可以简单的认为vi的增强版 Linux是区分大小写的! 用法 ...

  6. calico和flannel的优缺点

    1.Kubernetes通信问题 1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现. 2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另 ...

  7. disk磁盘分区软件使用教程,磁盘扩容无损备份

    前几天,因为我的笔记本电脑C盘D盘全红了,趁着双11固态降价,赶紧买了一张三星980 500g 给我的拯救者插上了,加上原来的500g,总共1T,已经够用了. 不得不说拯救者系列预留的1个M.2固态插 ...

  8. 聊聊GPU与CPU的区别

    目录 前言 CPU是什么? GPU是什么? GPU与CPU的区别 GPU的由来 并行计算 GPU架构优化 GPU和CPU的应用场景 作者:小牛呼噜噜 | https://xiaoniuhululu.c ...

  9. IO学习笔记

    IO File 概述 构造方法 代码实现: public class FileDemo001 { public static void main(String[] args) { File f1 = ...

  10. 嵌入式-C语言基础:字符串strlen和sizeof的区别

    strlen表示的实际的字符串长度,不会把字符串结束符'\0'计算进去,而sizeof则不是实际的字符串长度,它会把字符串的结束标识符'\0'也包含进去. #include<stdio.h> ...