100行代码实现一个vue分页组功能


Posted in Javascript onNovember 06, 2018

今天用vue来实现一个分页组件,总体来说,vue实现比较简单,样式部分模仿了elementUI。所有代码的源码可以再github上下载的到:下载地址 先来看一下实现效果:

100行代码实现一个vue分页组功能

点击查看效果

整体思路

我们先看一下使用到的文件的目录:

100行代码实现一个vue分页组功能

我们在 pageComponentsTest.vue 页面引入了 pageComponent.vue 分页组件。整体思路是通过 props
来达到组件的灵活通用的效果,整体语法是使用vue的VM语法。

pageComponent.vue实现

首先实现一个分页,需要知道数据总条数,一个页面显示的数据条数和当前显示第几页的数据。那么我们在 pageComponent.vue 里面的 props 就有了。看下面的代码:

props: {
   // 分页配置
   pageConfig: {
    type: Object, require: true, default() {
     return {
      pageSize: 10,   //一页的数据条数
      pageNo: 0,    //当前页的索引
      total: 0,     //总的数据条数
      pageTotal: 0   //总的页数
     }
    }
   }

根据用户入参,我们可以使用计算属性来计算一个总页数的变量:

computed: {
   //计算总页数,如果传了pageTotal,直接取pageTotal的值,如果传了total,那么根据pageSize去计算
   pageTotal(){
    const config = this.pageConfig
    if(config.pageTotal){
     return config.pageTotal
    }else {
     if(config.pageSize && config.total){
      return Math.ceil(config.total/config.pageSize)
     }else {
      return 0
     }
    }
   }
  }

有了总页数,和当前页,就需要各种判断来实现我们的html部分了,这里分4中情况

  1. 总页数小于8,只需要直接遍历到8就行了。
  2. 总页数大于8,但当前页小于4的。
  3. 总页数大于8,当前页靠后的。
  4. 总页数大于8,当前页在中间的。

下面看具体的实现:

<!--上一页-->
   <button @click="prePage" :disabled="currentPage === 1">上一页</button>
   <!--总页数小于8的-->
   <template v-if="pageTotal <= showPageNo">
    <button v-for="i in pageTotal" @click="changeCurrentPage(i)" :class="{active:i === currentPage}" :key="i">{{i}}</button>
   </template>
   <template v-else-if="currentPage < 4">
    <button v-for="i in 6" @click="changeCurrentPage(i)" :class="{active:i === currentPage}" :key="i">{{i}}</button>
    <button :disabled="true">···</button>
    <button>{{pageTotal}}</button>
   </template>
   <template v-else-if="currentPage > pageTotal - 4">
    <button>1</button>
    <button :disabled="true">···</button>
    <button v-for="i in 6" @click="changeCurrentPage(i + (pageTotal - 6))" :class="{active:(i + (pageTotal - 6)) === currentPage}" :key="i">{{i + (pageTotal - 6)}}</button>
   </template>
   <template v-else>
    <button>1</button>
    <button :disabled="true">···</button>
    <button @click="changeCurrentPage(currentPage - 2)">{{currentPage - 2}}</button>
    <button @click="changeCurrentPage(currentPage - 1)">{{currentPage - 1}}</button>
    <button class="active">{{currentPage}}</button>
    <button @click="changeCurrentPage(currentPage + 1)">{{currentPage + 1}}</button>
    <button @click="changeCurrentPage(currentPage + 2)">{{currentPage + 2}}</button>
    <button :disabled="true">···</button>
    <button @click="changeCurrentPage(pageTotal)">{{pageTotal}}</button>
   </template>
   <!--下一页-->
   <button @click="nextPage" :disabled="currentPage === pageTotal">下一页</button>

可以看到页面上需要实现3个方法,分别是上下页,和点击页面的方法。

methods: {
   prePage(){
    this.currentPage -= 1
    this.$emit('changeCurrentPage',this.currentPage)
   },
   nextPage(){
    this.currentPage += 1
    this.$emit('changeCurrentPage',this.currentPage)
   },
   changeCurrentPage(i){
    this.currentPage = i
    this.$emit('changeCurrentPage',this.currentPage)
   }
  }

以上就是 pageComponent.vue 的大致实现了,每次页面改变,都会触发一个 changeCurrentPage 方法的回调,用来通知当前使用组件的页面当前页已经改变。

pageComponentsTest.vue的实现

引用页面就比较简单了,只要传入组件需要的对应的参数,就能显示我们的组件了。 引用部分:

<template>
 <div class="pageComponentsTest">
  <page-component :page-config="pageConfigTotal" @changeCurrentPage="changePage"></page-component>
  <page-component :page-config="pageConfigPageTotal"></page-component>
 </div>
</template>

配合入参部分:

{
  name: "pageComponentsTest",
  data() {
   return {
    pageConfigTotal:{total:21,pageSize:10,pageNo:1},
    pageConfigPageTotal:{total:21,pageSize:10,pageNo:1,pageTotal:50}
   }
  },
  components:{'page-component':pageComponent},
  methods: {
   changePage(page){
    this.pageConfigTotal.pageNo = page
   }
  }
 }

总结

可以看到使用vue实现分页组件整体来说是很容易了,比使用jQuery方便很多,使用vm模式开发前端的最明显的一个好处是,能是数据mode部分与view页面部分保持同步,而开发者不用考虑这个过程,所以整体来说简单了很多。

以上所述是小编给大家介绍的100行代码实现一个vue分页组功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript中的对象和数组的应用技巧
Jan 07 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
May 03 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
jQuery插件开发汇总
May 15 Javascript
利用Angularjs和bootstrap实现购物车功能
Aug 31 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
设置cookie指定时间失效(实例代码)
May 28 Javascript
解读vue生成的文件目录结构及说明
Nov 27 Javascript
详解Vue 如何监听Array的变化
Jun 06 Javascript
深入解读VUE中的异步渲染的实现
Jun 19 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 #Javascript
Vue递归实现树形菜单方法实例
Nov 06 #Javascript
electron中使用bootstrap的示例代码
Nov 06 #Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 #Javascript
浅谈Vue数据响应思路之数组
Nov 06 #Javascript
Vue项目中最新用到的一些实用小技巧
Nov 06 #Javascript
详解Vue内部怎样处理props选项的多种写法
Nov 06 #Javascript
You might like
php中使用sftp教程
2015/03/30 PHP
PHP SOCKET编程详解
2015/05/22 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
微信小程序分页加载的实例代码
2017/07/11 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
python绘制动态曲线教程
2020/02/24 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
如何填写个人简历自我评价
2013/12/10 职场文书
音乐专业自荐信
2014/02/07 职场文书
教师节宣传方案
2014/05/23 职场文书
秋季运动会开幕词
2015/01/28 职场文书
电力培训学习心得体会
2016/01/11 职场文书
nginx优化的六点方法
2021/03/31 Servers
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技