vue 单独封装分页组件
一、在components文件夹下新建 pagination.vue
<template>
<div class="page-wrap">
<ul>
<li class="li-page" :plain="true" @click="goPrePage">«</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">»</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 单独封装分页组件的更多相关文章
- 基于Vue封装分页组件
使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} ...
- vue 封装分页组件
分页 一般都是调接口, 接口为这种格式 {code: 0, msg: "success",…} code:0 data:{ content:[{content: "11& ...
- vue封装分页组件
element提供的分页是已经封装好的组件,在这里再次封装是为了避免每个用到分页的页面点击跳转时都要写一遍跳转请求 分页组件 <!--分页组件--> <template> &l ...
- Vue 实现一个分页组件
实现分页组件要分三个部分 样式,逻辑,和引用 首先新建一个vue文件用来承载组件内容 第一步:构建样式 <template> <nav> <ul class=" ...
- vue中使用分页组件、将从数据库中查询出来的数据分页展示(前后端分离SpringBoot+Vue)
文章目录 1.看实现的效果 2.前端vue页面核心代码 2.1. 表格代码(表格样式可以去elementui组件库直接调用相应的) 2.2.分页组件代码 2.3 .script中的代码 3.后端核心代 ...
- Vue自行封装常用组件-弹出框
使用方法: 1.在父组件中引入"box.vue" //import popUpBox from "./box.vue"; 2.在父组件中注册 popUpBo ...
- Vue 数组封装和组件data定义为函数一些猜测
数组封装 var vm={ list:[0,1] } var push=vm.list.push;//把数组原来的方法存起来 vm.list.push=function(arg){//重新定义数组的 ...
- Vue文件封装日历组件
封装就是要具有灵活性,样式自适应,调用的时候传入props就可以变成自己想要的样式. 效果展示网址:https://1963331542.github.io/ 源代码: <template> ...
- Vue中封装axios组件实例
首先要创建一个网络模块network文件夹 里面要写封装好的几个组件 在config.js里面这样写 在index.js要这样写 core.js文件里面内容如下 然后要在main.js文件里面要设置 ...
- [ vue ] Quasar封装q-dialog组件,在外层实现弹出框的开启和关闭
场景描述: 见:https://www.cnblogs.com/remly/p/12981582.html 具体实现: <!-- 父组件 --> <template> < ...
随机推荐
- Linux命令全解
strace 获取某个可执行文件执行过程中用到的所有系统调用 :strace -f g++ main.cpp &| vim 查看g++编译过程调用了哪些系统调用,通过管道符用vim接收 :%! ...
- VS中git概念解析与深度使用
基础概念 四个区 工作区(Working Area) 暂存区(Stage) 本地仓库(Local Repository) 远程仓库(Remote Repository) 五种状态 未修改(Origin ...
- Windows常用快捷键及基本的Dos命令
Windows 常用快捷键 Ctrl + C: 复制 Ctrl + V: 粘贴 Ctrl + A: 全选 Ctrl + X: 剪贴 Ctrl + Z: 撤销 Ctrl + S: 保存 Alt + F4 ...
- KMP模式匹配 学习笔记
功能 能在线性时间内判断字符串\(A[1~N]\)是否为字符串\(B[1~M]\)的子串,并求出字符串\(A\)在字符串\(B\)中各次出现的位置. 实现 1.对字符串\(A\)进行自我"匹 ...
- Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
文章目录 1.列表排序 1.1 .代码实例 1.2 .测试效果 1.3.需要掌握的前提知识 2.Vue监测数据变化的原理 2.1.代码实例 2.2 .测试效果 3.Vue检测数据的原理 3.1 基本知 ...
- 初始Vue、Vue模板语法、数据绑定(2022/7/3)
文章目录 1.Vue简介 1.1.Vue的安装使用 1.2.实际的运用案例 1.3.vue开发工具的使用(这个需要在浏览器中安装) 2.初始Vue 2.1 .基础知识 2.1 .代码实例 2.2 .页 ...
- Linux系统安装宝塔面板教程
# Linux系统宝塔安装教程 注意:安装宝塔面板的前提条件 首先要有一台服务器或者使用linux系统的虚拟机. 安装前请确保是[全新的机器].必须是没装过其它环境的新系统,如Apache/Nginx ...
- 45.限流Throttling及源码解析
什么是限流? 限流类似于权限机制,它也决定是否接受当前请求,用于控制客户端在某段时间内允许向API发出请求的次数,也就是频率 假设有客户端(比如爬虫程序)短时间发起大量请求,超过了服务器能够处理的能力 ...
- Debian安装 WineHQ 安装包
https://wiki.winehq.org/Debian_zhcn WineHQ 源仓库的密钥于 2018-12-19 改变过.如果您在此之前下载添加过该密钥,您需要重新下载和添加新的密钥并运行 ...
- Unreal NetMode&NetRole 解析
Version: Unreal 4.26 问题 为啥UE编辑器会有EPlayNetMode有三种让你选择. 为啥描述World 的ENetMode 会有4种,而不只是(Client/Server 2种 ...