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 ...
随机推荐
- 升级php7一些需要注意的地方
1.升级过程涉及代码的主要处理的就是几个扩展(mysql.mssql .mcrypt.ereg)使用到的一些废弃函数(call_user_method.call_user_method_array等) ...
- Linux 下的profile
# /etc/profile # System wide environment and startup programs, for login setup# Functions and aliase ...
- JSONP跨域后回调函数中的参数使用
有关于跨域的解决方案网上的资源十分丰富,我是参考这个博主的:https://blog.csdn.net/u014607184/article/details/52027879: 这里的response ...
- sublime text注册码与快捷键
其他版本: —– BEGIN LICENSE —– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 ...
- dns未设置 PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed:
php通过去访问外部网站时,出现以下提示: PHP Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed ...
- python模块——hashlib模块(简单文件摘要算法实现)
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: hashlib模块 import ...
- HDU-1163 Eddy's digital Roots(九余数定理)
Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- JQuery $未定义
---恢复内容开始--- JQuery $未定义 转载▼ jquery是Yii集成的,利用jquery写的代码$(document).ready(function(){// 操作列表$('.ope ...
- 使用API失效供应商地址Demo(转)
原文地址 使用API失效供应商地址Demo DECLARE lv_return_status ) := NULL; ln_msg_count NUMBER; lv_errmsg ); lt_vend ...
- Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'e ...