场景重现:在项目中使用了keep-alive来缓存组件,且使用element中的table列表,但在项目中是对table进行了二次封装,跟页码合在了一起。按照网上的直接对scrollTop赋值,赋值失败了,还要加上setTimeout才能成功,虽然实现了功能,但是不知道原因,可以的话希望有人能解答。
废话少说,直接赋上代码。
<template>
<div class="table">
<el-table ref="table">
...
</el-table>
<wp-pager @page-change="pageChange" :total="total" v-if="pager" v-bind="$attrs" v-on="$listeners"></wp-pager>
</div>
</template>
<script>
import { WpPager } from '../pager'
export default {
data() {
return {
scrollTop: null
}
},
activated() {
this.saveScroll()
},
mounted() {
// 监听滚动条的位置
this.$refs.table.bodyWrapper.addEventListener('scroll', (res) => {
let height = res.target
this.scrollTop = height.scrollTop
},false)
},
beforeDestroy() {
this.$refs.table.bodyWrapper.removeEventListener('scroll', (res) => {
let height = res.target
this.scrollTop = height.scrollTop
},false)
},
methods: {
// 当页码改变的时候滚动条重新到顶部
pageChange (page) {
this.$emit('page-change', page)
this.scrollTop = 0
this.saveScroll()
},
// 这里如果直接赋值给this.$el.querySelector('.el-table__body-wrapper').scrollTop会失效,需要加上setTimeout才行。
saveScroll() {
this.$nextTick(()=> {
setTimeout(() => {
var scrollTop = this.$el.querySelector('.el-table__body-wrapper')
scrollTop.scrollTop = this.scrollTop
}, 13)
})
}
}
}
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。