场景重现:在项目中使用了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>