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 ...
随机推荐
- DB中字段为null,为空,为空字符串,为空格要怎么过滤取出有效值
比如要求取出微信绑定的,没有解绑的 未绑定,指定字段为null 绑定的,指定字段为某个字符串 解绑的,有的客户用的是更新指定字段为1,有的客户更新指定字段为‘1’ 脏数据的存在,比如该字段为空字符 ...
- Hibernate HQL查询 插入 更新(update)实例
1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...
- Android中getLocationOnScreen和getLocationInWindow 获取屏幕大小
需要确定组件在父窗体中的坐标时,使用getLocationInWindow,需要获得组件在整个屏幕的坐标时,使用getLocationOnScreen. 其中location [0]代表x坐标,loc ...
- Python 运算符重载
https://www.cnblogs.com/hotbaby/p/4913363.html
- 4-12 如何搜索API
遇到一个参数prompt,使用rails ,API没有找到,怎么办? site关键字 在全网搜索 或者google一下,或是在stack overflow 上找答案 prompt 是FormOptio ...
- 21 模块(collections,time,random,os,sys)
关于模块importfrom xxx import xxx2. Collections1. Counter 计数器2. 栈: 先进后出.队列:先进先出deque:双向队列3. defaultdict ...
- Connected Components? CodeForces - 920E (bfs)
大意:给定无向图, 求补图的连通块数 bfs模拟即可, 这里用了map存图, set维护未划分的点集, 复杂度$O(nlog^2n)$, 用链表的话可以$O(n)$ #include <iost ...
- h5 plus/h5+规范使用,模块索引,教你如何去看h5+的手册
最近看了下h5+规范的官网,开始觉得晦涩难懂,确实很乱,不过这也是基于我不理解的情况,终于艰难读完了,现在来分享下心得吧,基本看完文章,按我的方法,应该可以直接上手项目. 我准备的工具 hbuilde ...
- oracle EBS grant 您不具有执行当前操作的足够权限。请与您的系统管理员联系。
解决方式1: Set the profiles of the below three to 'None' 设置以下三个配置文件为无 FND_VALIDATION_LEVELFND 验证层 FND_FU ...
- spring的FactoryBean
(以下内容翻译自spring/docs/3.2.18.RELEASE) 为具有工厂属性的对象实现FactoryBean接口. FactoryBean接口是spring IoC 容器实例化逻辑的一点补充 ...