最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

利用vue2.0实现的分页组件

来源:动视网 责编:小采 时间:2020-11-27 20:19:14
文档

利用vue2.0实现的分页组件

利用vue2.0实现的分页组件:最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的分页组件, 就自己写了一个, 效果如下:该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己调整:首先新建pagination.vue文件, 所有组件的代码都写在这里, 写这样
推荐度:
导读利用vue2.0实现的分页组件:最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的分页组件, 就自己写了一个, 效果如下:该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己调整:首先新建pagination.vue文件, 所有组件的代码都写在这里, 写这样
 最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的分页组件, 就自己写了一个, 效果如下:

该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己调整:

首先新建pagination.vue文件, 所有组件的代码都写在这里, 写这样的组件并没有什么太大的难度, 主要是解决父子组件之间值传递的问题

<template>
 <nav>
 <ul class="pagination">
 <li :class="{'disabled': current == 1}"><a href="javascript:;" @click="setCurrent(current - 1)"> ? </a></li>
 <li :class="{'disabled': current == 1}"><a href="javascript:;" @click="setCurrent(1)"> 首页 </a></li>
 <li v-for="p in grouplist" :class="{'active': current == p.val}"><a href="javascript:;" @click="setCurrent(p.val)"> {{ p.text }} </a>
 </li>
 <li :class="{'disabled': current == page}"><a href="javascript:;" @click="setCurrent(page)"> 尾页 </a></li>
 <li :class="{'disabled': current == page}"><a href="javascript:;" @click="setCurrent(current + 1)"> ?</a></li>
 </ul>
 </nav>
</template>

<script type="es6">
 export default{
 data(){ return {
 current: this.currentPage
 }
 },
 props: {
 total: {// 数据总条数 type: Number,default: 0 },
 display: {// 每页显示条数 type: Number,default: 10 },
 currentPage: {// 当前页码 type: Number,default: 1 },
 pagegroup: {// 分页条数 type: Number,default: 5,
 coerce: function (v) {
 v = v > 0 ? v : 5; return v % 2 === 1 ? v : v + 1;
 }
 }
 },
 computed: {
 page: function () { // 总页数return Math.ceil(this.total / this.display);
 },
 grouplist: function () { // 获取分页页码var len = this.page, temp = [], list = [], count = Math.floor(this.pagegroup / 2), center = this.current;if (len <= this.pagegroup) { while (len--) {
 temp.push({text: this.page - len, val: this.page - len});
 }
 ; return temp;
 }while (len--) {
 temp.push(this.page - len);
 }
 ;var idx = temp.indexOf(center);
 (idx < count) && ( center = center + count - idx);
 (this.current > this.page - count) && ( center = this.page - count);
 temp = temp.splice(center - count - 1, this.pagegroup);do { var t = temp.shift();
 list.push({
 text: t,
 val: t
 });
 } while (temp.length);if (this.page > this.pagegroup) {
 (this.current > count + 1) && list.unshift({text: '...', val: list[0].val - 1});
 (this.current < this.page - count) && list.push({text: '...', val: list[list.length - 1].val + 1});
 }return list;
 }
 },
 methods: {
 setCurrent: function (idx) {if (this.current != idx && idx > 0 && idx < this.page + 1) { this.current = idx; this.$emit('pagechange', this.current);
 }
 }
 }
 }</script>

<style lang="less">
 .pagination {
 overflow: hidden;
 display: table;
 margin: 0 auto;/*width: 100%;*/height: 50px;

 li {float: left;
 height: 30px;
 border-radius: 5px;
 margin: 3px;
 color: #666; &
 :hover {
 background: #000;

 a {
 color: #fff;
 }

 }
 a {
 display: block;
 width: 30px;
 height: 30px;
 text-align: center;
 line-height: 30px;
 font-size: 12px;
 border-radius: 5px;
 text-decoration: none
 }

 }
 .active {
 background: #000;

 a {
 color: #fff;
 }

 }
 }</style>

使用时, 在父组件中引入, 代码如下:

<template>
 <v-pagination :total="total" :current-page='current' @pagechange="pagechange"></v-pagination>
</template>

<script type="es6">
 import pagination from '@/components/common/pagination/pagination'export default{
 data(){ return {
 total: 150, // 记录总条数display: 10, // 每页显示条数current: 1, // 当前的页数},
 methods: {
 pagechange:function(currentPage){
 console.log(currentPage); // ajax请求, 向后台发送 currentPage, 来获取对应的数据 }
 },
components: { 'v-pagination': pagination,
 }
}</script>

至此, 一个基于 vue2.0 的分页组件就完成了

文档

利用vue2.0实现的分页组件

利用vue2.0实现的分页组件:最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的分页组件, 就自己写了一个, 效果如下:该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己调整:首先新建pagination.vue文件, 所有组件的代码都写在这里, 写这样
推荐度:
标签: 使用 VUE 组件
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top