pagination.vue

<!-- 表格分页组件 -->
<template>
<nav class="boot-nav">
<ul class="pagination boot-page">
<li>
<a href="javascript:void(0)" @click="wholePrevClick()">
<span aria-hidden="true">第一页</span>
</a>
</li>
<li>
<a href="javascript:void(0)" aria-label="Previous" @click="onPrevClick()">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<li v-for="(page, index) in pages" :class="activeNum === index ? 'active' : ''">
<a href="javascript:void(0)" v-text="page" @click="onPageClick(index)"></a>
</li>
<li>
<a href="javascript:void(0)" aria-label="Next" @click="onNextClick()">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
<li>
<a href="javascript:void(0)" @click="wholeNextClick()">
<span aria-hidden="true">最后一页</span>
</a>
</li>
</ul>
<div class="page-total">
共 <span v-text="pageTotal"></span> 页
</div>
</nav>
</template> <script>
export default {
props: { // 每页显示个数
len: {
type: Number,
default:
},
// 表格数据(数组)
data: {
type: Array,
default: function () {
return []
}
},
// AJAX地址
url: {
type: String,
default: ''
},
//当前页的字段
currentPage: {
type: String,
default: ''
},
totalPages: {
type: String,
default: ''
},
totalName: {
type: String,
default: ''
},
// 显示页数
pageLen: {
type: Number,
default:
}, // 参数内容
param: {
type: Object,
default: function () {
return {}
}
},
//method
method:{
type:String,
default:'get'
}
},
data () {
return {
// 页码
pages: {
type: Array,
default: function () {
return []
}
},
// 总页数
pageTotal: {
type: Number,
default:
},
activeNum: ,
first: -,
last: -
}
},
methods: {
// 第一页
wholePrevClick: function() {
this.first = ;
var newPages = [];
for (let i = ; i < this.pages.length; i++) {
newPages[i] = i +;
}
this.pages = newPages;
this.activeNum = ;
this.getData();
},
// 最后一页
wholeNextClick: function() {
this.last = this.pageTotal;
var newPages = [];
for (let i = ; i < this.pages.length; i++) {
newPages[this.pages.length-i-] = this.pageTotal-i;
}
this.pages = newPages;
this.activeNum = this.pages.length-;
this.getData();
},
pageMake: function(index) {
let newPages = [];
let len2 = parseInt(this.pages.length/);
if(this.pages[index] <= len2 || this.pageTotal <= this.pageLen || this.pages[index] > this.pageTotal-len2) {
for (let i = ; i < this.pages.length; i++) {
newPages[i] = this.pages[i];
}
this.activeNum = index;
}else if( this.pages[index] <= this.pageTotal-len2) {
for (let i = ; i < this.pages.length; i++) {
newPages[i] = this.pages[index]-len2+i;
}
this.activeNum = len2;
}
this.pages = newPages;
this.getData();
},
// 点击页码刷新数据
onPageClick (index) {
this.pageMake(index);
},
// 上一页
onPrevClick () {
// 当前页是否为当前最小页码
if (this.activeNum > ) {
// this.activeNum = this.activeNum - 1;
let index = this.activeNum -;
this.pageMake(index);
} else {
if (this.pages[] !== ) {
let newPages = []
for (let i = ; i < this.pages.length; i++) {
newPages[i] = this.pages[i] -
}
this.pages = newPages
this.getData()
}
}
},
// 下一页
onNextClick () {
// 当前页是否为当前最大页码
if (this.activeNum < this.pages.length - ) {
// this.activeNum = this.activeNum + 1
let index = this.activeNum + ;
this.pageMake(index);
} else {
if (this.pages[this.pages.length - ] < this.pageTotal) {
let newPages = [] for (let i = ; i < this.pages.length; i++) {
newPages[i] = this.pages[i] +
}
this.pages = newPages
this.getData()
}
}
},
// 获取页码
getPages () {
this.pages = []
// 比较总页码和显示页数
if (this.pageTotal <= this.pageLen) {
//console.log(this.pageTotal+"....."+this.pageLen)
for (let i = ; i <= this.pageTotal; i++) {
this.pages.push(i)
}
} else {
for (let i = ; i <= this.pageLen; i++) {
this.pages.push(i)
}
}
},
// 页码变化获取数据
getData () {
var _self = this;
this.param[_self.currentPage] = this.pages[_self.activeNum];
if( this.first!= -) {
this.param[_self.currentPage] = this.first;
this.first = -;
}else if (this.last != -) {
this.param[_self.currentPage] = this.last;
this.last = -;
}
this.$nextTick(function(){
var _self = this;
var param = _self.param;
this.$http.get( _self.url, {params: param},
).then(function(data) {
var data = data.body.data;
_self.pageTotal = data.totalPage;
data = data.data;
if (_self.pages.length !== _self.pageLen || _self.pageTotal < _self.pageLen) {
_self.getPages();
}
_self.$store.commit('changeRenderData',{data})
})
});
},
refresh () {
this.pages = [] this.activeNum = this.getData()
}
},
created() {
this.refresh();
this.getData();
this.getPages();
}
} </script> <style scoped>
.boot-select {
float: left;
width: 80px;
} .boot-nav {
float: right;
} .boot-page {
display: inline-block;
margin: 2px 10px 20px;
vertical-align: middle;
} .page-total {
display: inline-block;
vertical-align: middle;
}
</style>

store.js

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
  renderData: {}, //数据
},
mutations: {
/*
* 及时保存后台数据
*/
  changeRenderData: (state, data) => {
    state.renderData = data.data;
  }
}
}); export default store;

调用:

table.vue

<template>
<div class="body-box container"> <table class="table table-hover table-bordered">
<thead>
<tr>
<th class="text-center"></th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(list,index) in count">
{{list.id}}
{{index}}
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="" >
<div class="col-sm-12 text-center">
                  //组件调用 传参
<pagination :url="url" :param="param" :current-page="currentPage" :total-pages="totalPages"></pagination>
</div>
</td>
</tr>
</tfoot>
</table>
</div>
</template>
<script>
import pagination from '../components/pagination.vue'
export default {
data() {
return {
url: 'http://******/bike/bikeList', // 请求路径
param: {}, // 向服务器传递参数,
currentPage: 'pageNum',//对应接口中的当前页
totalPages: 'totalPage',//对应接口中的总数字段
}
},
created() { },
components: {
pagination
},
methods: {
},
computed: {
       //通过store拿到data
count() {
return this.$store.state.renderData;
// console.log(this.tableList);
}
} }
</script>
<style scoped lang='scss'></style>

vue2.0分页组件,的更多相关文章

  1. 超简单的vue2.0分页组件

    1.组件代码 <template> <div class="pagination_comment_style" style="width: 100%;o ...

  2. Vue2.0 分页插件pagination使用详细说明

    Vue2.0 分页pagination使用 插件下载地址:Vue_Pagination 插件描述:基于jQuery的分页插件大家都用过很多了吧,今天分享一下基于Vue的分页插件pagination.j ...

  3. vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值

    axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...

  4. 手把手教你撸个vue2.0弹窗组件

    手把手教你撸个vue2.0弹窗组件 在开始之前需要了解一下开发vue插件的前置知识,推荐先看一下vue官网的插件介绍 预览地址 http://haogewudi.me/kiko/inde... 源码地 ...

  5. 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑

    eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...

  6. 基于angular4.0分页组件

    分页组件一般只某个页面的一小部分,所以我们它是子组件 当然如果你承认这话的,可以往下看,因为我把他当作子组建来写了 分页组件的模版 import { Component } from '@angula ...

  7. vue2.0父子组件之间通信

    父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...

  8. vue2.0 父子组件通信 兄弟组件通信

    父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...

  9. vue2.0子组件修改父组件props数据的值

    从vue1.0升级至2.0之后 prop的.sync被去除 因此直接在子组件修改父组件的值是会报错的如下: 目的是为了阻止子组件影响父组件的数据那么在vue2.0之后 如何在子组件修改父组件props ...

随机推荐

  1. RabbitMQ入门_15_访问控制

    参考资料:https://www.rabbitmq.com/access-control.html A. 核心概念 Virtual Host:虚拟主机为 RabbitMQ 中的资源提供了逻辑分组与隔离 ...

  2. React生命周期钩子

    最近的工作都很忙,所以很少完整的时间可以用来总结和回顾知识点,今天就趁着是周末,我准备在这里复习和回顾一下React的基础.工作中主要用的vue比较多,在工作中使用React也已经是一年前了,当时用的 ...

  3. angular2版本迭代之特性追踪

    一. 2.0.0 升级到 2.4 升级前: 1.确保没有使用extends关键字实现OnInit的继承,以及没有用任何的生命周期中,而是全部改用implements. 2.停止使用deep impor ...

  4. Java 集合-集合介绍

    2017-10-30 00:01:09 一.Java集合的类关系图 二.集合类的概述 集合类出现的原因:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类. ...

  5. Java读取xml

    首先将xml的格式展示出来,如下 <?xml version="1.0"?> <configuration> <connectionStrings n ...

  6. Kafka特性

    ———————————————————————————————————————————————— [关键原理] 1.消息文件存储(消息堆积能力) 2.消息topic分区 3.消息顺序的保证 4.拉模型 ...

  7. ASP.NET的内置对象 —— Response 对象

    在 ASP.NET 中,页面实际上是一个输出 HTML 的可执行对象. 传统的 ASP 程序通常将 ASP 代码和 HTML 标签集成在一个文件中,或者将其分离于多个文 件. 当执行文件时,服务器回从 ...

  8. WebService学习总结(转)

    原文地址: WebService学习总结(一)——WebService的相关概念 WebService学习总结(二)——WebService相关概念介绍 WebService学习总结(三)——使用JD ...

  9. 算法笔记——C/C++语言基础篇(已完结)

    开始系统学习算法,希望自己能够坚持下去,期间会把常用到的算法写进此博客,便于以后复习,同时希望能够给初学者提供一定的帮助,手敲难免存在错误,欢迎评论指正,共同学习.博客也可能会引用别人写的代码,如有引 ...

  10. Openwrt VLAN Configure(2)

    1      Scope of Document This document describes vlan design on nodewrt2p 2      Requiremen 2.1     ...