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

<template>
<div class="page-wrap">
<ul>
<li class="li-page" :plain="true" @click="goPrePage">&laquo;</li>
<li v-for="(i, index) in showPageBtn" :key="index"
:class="{active: i === currentPage, pointer: i, hover: i && i !== currentPage}" @click="pageOffset(i)">
<a v-if="i">{{i}}</a>
<a v-else>···</a>
</li>
<li class="li-page" :plain="true" @click="goNextPage">&raquo;</li>
</ul>
</div>
</template> <script>
export default {
name: "pagination",
props: {
num: Number,
limit: Number
},
data: () => ({
offset: 0
}),
computed: {
prePage() {
return this.offset !== 0 && this.num;
},
nextPage() {
return (this.offset + this.limit < this.num) && this.num
},
totalPage() {
return Math.ceil(this.num / this.limit)
},
currentPage() {
return Math.ceil(this.offset / this.limit) + 1
},
showPageBtn() {
const pageNum = this.totalPage;
const index = this.currentPage;
if (pageNum <= 5) return [...new Array(pageNum)].map((v, i) => i + 1);
if (index <= 2) return [1, 2, 3, 0, pageNum];
if (index >= pageNum - 1) return [1, 0, pageNum - 2, pageNum - 1, pageNum];
if (index === 3) return [1, 2, 3, 4, 0, pageNum];
if (index === pageNum - 2) return [1, 0, pageNum - 3, pageNum - 2, pageNum - 1, pageNum];
return [1, 0, index - 1, index, index + 1, 0, pageNum]
}
},
methods: {
pageOffset(i) {
if (i === 0 || i === this.currentPage) return;
this.offset = (i - 1) * this.limit;
this.$emit('getNew', this.offset);
},
goPrePage() {
if (!this.prePage) {
// alert("这里是第一页呀,亲!");
this.$message({
showClose: true,
message: '这是第一页哦!',
type: 'warning'
});
return;
}
this.offset -= this.limit;
this.$emit('getNew', this.offset);
},
goNextPage() {
if (!this.nextPage) {
// alert("已经是最后一页了呢~");
this.$message({
showClose: true,
message: '这是最后一页啦!',
type: 'warning'
});
return;
}
this.offset += this.limit;
this.$emit('getNew', this.offset);
}
}
} </script> <style scoped>
.li-page {
/* line-height: 25px; */
cursor: pointer;
color: #505362;
background-color: #f4f4f5;
} .active {
border-color: #0C9F9A;
background-color: #0C9F9A;
} .pointer {
cursor: pointer;
} .hover {
color: #FFF;
background-color: #FFF;
} .active a {
color: #FFF;
} .page-wrap {
font-size: 14px;
margin-top: 10px;
text-align: center;
} .page-wrap ul {
display: inline-block;
list-style: none;
overflow: hidden;
padding-inline-start: 0px;
} .page-wrap li {
float: left;
color: #505362;
padding: 10px 17px;
margin: 0 5px;
border-radius: 3px;
user-select: none;
border: 1px solid transparent;
} </style>

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

<script>
import pagination from "../../components/pagination.vue"
export default {
components: {
pagination
},
data(){
return {
numpage: 0,
limit: 10,
currentList: [],
list:[{
name:'dsa',id:1
},{
name:'dsa',id:2
},{
name:'dsa',id:3
},]
}
}, mounted() {
this.getNew(0);
this.numpage = this.list.length;
},
methods:{
// 分页
getNew(value) {
this.currentList = this.list.slice(value, value + this.limit);
}, }
}
</script>

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

<div>
<!-- 分页 -->
<pagination :num="numpage" :limit="limit" @getNew="getNew"></pagination>
</div>

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

/********
*
* .-~~~~~~~~~-._ _.-~~~~~~~~~-.
* __.' 欢迎访问 ~. .~ `.__
* .'// 我的博客 \./ ☞ 送你小 ☜ \\`.
* .'// | \\`.
* .'// .-~"""""""~~~~-._ | _,-~~~~"""""""~-. \\`.
* .'//.-" `-. | .-' "-.\\`.
* .'//______.============-.. \ | / ..-============.______\\`.
* .'______________________________\|/______________________________`.
*/

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. Java代码审计之实战某博客

    对某博客的代码审计 在gitee上面找了一个个人博客项目,来进行实战代码审计,主要还是学习为主 技术菜菜,哪里错误希望师傅们指正 1.SQL注入 先了解Java Web中的数据传输流程 graph T ...

  2. 华为路由器OSPF配置常用命令

    OSPF单区域配置 ospf 1 进入ospf视图1代表进程号 area 0 创建区域并进入OSPF区域视图,输入要创建的区域ID,骨干区域即区域0 network +IP +匹配码 display ...

  3. 【算法】基础DP

    参考资料 背包九讲 一.线性DP 如果现在在状态 i 下,它上一步可能的状态是什么. 上一步不同的状态依赖于什么. 根据上面的分析,分析出状态和转移方程.注意:dp 不一定只有两维或者一维,一开始设计 ...

  4. 后端框架学习1-----Spring

    Spring学习笔记 spring全家桶:https://www.springcloud.cc/spring-reference.html spring中文文档:http://c.biancheng. ...

  5. JSP脚本知识

    JSP脚本元素 1.在jsp中嵌入的服务端运行的小程序称为脚本.实质是java程序. 2.脚本元素可以分为三类:表达式.Scriptlet.声明. 表达式 计算java表达式的值,得到的结果转化为字符 ...

  6. servlet技术--使用注解模拟用户登录实现页面跳转

    文章目录 1.servlet体系结构 2.servlet技术特点 3.servlet和jsp的区别 4.servlet开发 1.servlet体系结构 servlet实质就是按servlet规范编写的 ...

  7. ESP32 IDF 获取天气信息

    一.注册天气获取账号 我使用的知心天气,没有获取天气账号的小伙伴可以去注册一下,知心天气官网:https://www.seniverse.com/ 取得天气获取的API后,可以直接在浏览器中访问测试一 ...

  8. JavaScript进阶(Learning Records)

    背景:对JavaScript的深入学习 参考:<JavaScript高级程序设计><冴羽 JavaScript 深入> 从原型到原型链 prototype prototype是 ...

  9. ubuntu 输入法IBUS 输入不成功问题

    ubuntu 输入法IBUS 输入不成功问题 只需要在 输入如下代码 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMark ...

  10. 2022NISACTF--WEB

    easyssrf 打开题目,显示的是 尝试输入, 发现输入flag有东西 读取文件 访问下一个网站 读取文件 不能以file开头 直接伪协议,base64解码 checkIn 奇怪的unicode编码 ...