vue2.0分页组件,
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">«</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">»</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分页组件,的更多相关文章
- 超简单的vue2.0分页组件
1.组件代码 <template> <div class="pagination_comment_style" style="width: 100%;o ...
- Vue2.0 分页插件pagination使用详细说明
Vue2.0 分页pagination使用 插件下载地址:Vue_Pagination 插件描述:基于jQuery的分页插件大家都用过很多了吧,今天分享一下基于Vue的分页插件pagination.j ...
- vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值
axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...
- 手把手教你撸个vue2.0弹窗组件
手把手教你撸个vue2.0弹窗组件 在开始之前需要了解一下开发vue插件的前置知识,推荐先看一下vue官网的插件介绍 预览地址 http://haogewudi.me/kiko/inde... 源码地 ...
- 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑
eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...
- 基于angular4.0分页组件
分页组件一般只某个页面的一小部分,所以我们它是子组件 当然如果你承认这话的,可以往下看,因为我把他当作子组建来写了 分页组件的模版 import { Component } from '@angula ...
- vue2.0父子组件之间通信
父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...
- vue2.0 父子组件通信 兄弟组件通信
父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...
- vue2.0子组件修改父组件props数据的值
从vue1.0升级至2.0之后 prop的.sync被去除 因此直接在子组件修改父组件的值是会报错的如下: 目的是为了阻止子组件影响父组件的数据那么在vue2.0之后 如何在子组件修改父组件props ...
随机推荐
- 机器学习 MLIA学习笔记(二)之 KNN算法(一)原理入门实例
KNN=K-Nearest Neighbour 原理:我们取前K个相似的数据(排序过的)中概率最大的种类,作为预测的种类.通常,K不会大于20. 下边是一个简单的实例,具体的含义在注释中: impor ...
- highcharts PHP中使用
官网 https://www.hcharts.cn/demo/highcharts html <div id="container" style="min-widt ...
- Qt5.3.2_CentOS6.4_单步调试环境__20160306【勿删,繁琐】
20160306 全程没有f/q ZC:使用的虚拟机环境是:博客园VMwareSkill 的 “CentOS6.4_x86_120g__20160306.rar” 需要调试器 gdb ,从“http: ...
- 【Docker】性能测试监控平台搭建:InfluxDB+Grafana+Jmeter+cAdvisor
前言 在做性能测试时,如果有一个性能测试结果实时展示的页面,可以极大的提高我们对系统性能表现的掌握程度,进而提高我们的测试效率.但是我们每次打开Jmeter都会有几个硕大的字提示别用GUI模式进行负载 ...
- Codeforces 862B - Mahmoud and Ehab and the bipartiteness
862B - Mahmoud and Ehab and the bipartiteness 思路:先染色,然后找一种颜色dfs遍历每一个点求答案. 代码: #include<bits/stdc+ ...
- SpringBoot中的数据库连接池
内置的连接池 目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池. 数据库连接可以使用DataSource池进行自动配置. 由于Tomcat数 ...
- [.NET开发] C# BigInteger 处理超大整型数字
今天遇到一个要处理XSD中Integer的数值区间的计算的问题,Integer这个类型的值区间理论上是可没有边界的,假设目前的值是1.5E+10000, 这个数字已经达到double和Int64都无法 ...
- 1月24日 ruby基础3部分 Numeric, Array已学。
<div style="background:lightblue"> 第12章 数值类 12.1 数值的构成 Numeric-> Integer-> Fix ...
- Confluence 6 为空间赋予公共访问
希望为一个 Confluence 空间赋予公共访问权限,你必须为匿名用户赋予下面的权限: 在全站启用 可以使用(can use)权限,如上面描述的的. 相关的 空间权限.如果你希望你的一个空间可以公共 ...
- bzoj1834: [ZJOI2010]network 网络扩容 费用流
bzoj1834 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的情况下,1到N的最大流: 2.将1到N的最大流增加K所需的最小扩容 ...