keep-alive里的element表格滚动条缓存


1、需求:用户需要在两个缓存的页面切换查看数据,但是在keep-alive里面的element的滚动条会自动置顶。

2、思路:利用自定义指令给element的表格绑定,监听滚动条变化并记录,然后设置一个变量,在activated里面触发自定义指令,获取滚动条的记录并设置

3、实现:

自定义全局指令

Vue.directive('tableRollBack', {
    bind(el) {
        const selectWrap = el.querySelector('.el-table__body-wrapper')
        selectWrap.addEventListener('scroll', function() {
            window.sessionStorage.setItem('loadTop', this.scrollTop)
            window.sessionStorage.setItem('loadLeft', this.scrollLeft)
        })
    },
    componentUpdated(el) {
        const selectWrap = el.querySelector('.el-table__body-wrapper')
        let l = window.sessionStorage.getItem('loadLeft') || 0
        let t = window.sessionStorage.getItem('loadTop') || 0
        setTimeout(() => {
            selectWrap.scrollTo(l, t)
        }, 200)
    }
})

自定义混入payLoads.js

export default {
    data() {
        return {
            payLoads: ''
        }
    },
    activated() {
        this.payLoads = new Date().getTime()
    }
}

在页面引用

//在表格插入指令
v-tableRollBack="payLoads"

引入混入

import payLoads from '@/utils/payLoads.js'
export default {
    ...
    mixins: [payLoads],
    ...
}    

 4、效果