vue项目中用element ui组件的pagination组件,当手动刷新页面时当前页会回到默认选中效果,一般会回到第一页,如何刷新时让记住刷新前的页面,让刷新后的页面不变
vue项目中用element ui组件的pagination组件,当手动刷新页面时当前页会回到默认选中效果,一般会回到第一页,如何刷新时让记住刷新前的页面,让刷新后的页面不变
解决这个问题我看了,只有换组件,不知道官方到底怎么想的,这么大的bug,这么常见的需求,居然是一直没有解决的,随便换一个组件这个问题都解决了。
<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}" :key="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>
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="scss">
.pagination {
overflow: hidden;
display: table;
margin: 0 auto;
/*width: 100%;*/
height: 50px;
list-style: none;
li {
float: left;
height: 30px;
border-radius: 5px;
margin: 3px;
color: #666;
& :hover {
background: #409eff;
color: #FFF;
a {
color: #fff;
}
}
a {
display: block;
width: 30px;
height: 30px;
text-align: center;
line-height: 30px;
font-size: 13px;
border-radius: 2px;
background: #1C284A;
text-decoration: none;
color: #EDEFF8;
}
}
.active a {
background: #409eff;
color: #FFF;
}
}
</style>
`<template>
<div>
<!-- 分页 -->
<el-pagination
background
layout="prev, pager, next"
@current-change="pageChange"
:current-page="pageNo"
:page-size="pageSize"
:total="total">
</el-pagination>
</div>
</template>
<script>
export default {
data() {
return {
total: 100,
pageSize: 5,
pageNo: 1,
}
},
created() {
this.pageNo = Number(localStorage.getItem('pagination')) || 1;
this.pageChange(this.pageNo);
},
beforeUpdate () {
localStorage.setItem('pagination', this.pageNo);
},
beforeDestroy () {
localStorage.setItem('pagination', '1');
},
methods: {
pageChange (pageNo) {
this.loading = true;
this.pageNo = pageNo;
}
}
}
</script>
`
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
vue 做单页面项目的时候,状态是保存在运行状态里的,刷新会导致全部重新初始化,要达到你要的刷新后记住,只能做状态的本地存储,通过在localstorage中保存你的页码信息,在页面组件初始化的时候获取本地存储的信息,进而初始化,以达到你要的刷新保留状态的目的。