使用keep-alive时,返回后界面表格滚动条位置保留的功能实现

组件使用keep-alive缓存时,切换页签返回后界面表格滚动条位置保留的功能实现

最终实现效果(ps:因为录屏的原因导致页签切换界面会有延迟加载的情况, 不过这不重要哦, 只需要看到效果实现了就行哈)
在这里插入图片描述
实现方式:
只需要在当前需要保留表格滚动位置的组件下添加以下代码即可

export default {
 data() {
    return {
      scrollTop: 0,
      scrollTopBottom: 0
    }
  },
// activated被 keep-alive 缓存的组件激活时调用。即进入该组件时调用
//  当然  这里的activated也可以使用路由守卫beforeRouteEnter来操作,只是beforeRouteEnter会在activated之前执行,要进行滚动操作需要延时更久 所以就选择使用activated
 activated() {
 //    因为我们的table被封装了好多层, 需要连续的$refs去获取DOM,所以延时会比较久一点, 否则滚动设置就会无效;  如果代码中的表格就是用的el-table就不需要延时这么久, 而且只需要refs一层就行了
    setTimeout(() => {
    // 主表滚动条设置
      this.$refs.productionDeliveryTable && this.$refs.productionDeliveryTable.$refs.deeTable && (this.$refs.productionDeliveryTable.$refs.deeTable.$refs.deeTable.$refs.deeTable.bodyWrapper.scrollTop = this.scrollTop)
     //  子表滚动条设置
      this.$refs.detailTable && this.$refs.detailTable.$refs.deeTable && (this.$refs.detailTable.$refs.deeTable.$refs.deeTable.$refs.deeTable.bodyWrapper.scrollTop = this.scrollTopBottom)
    }, 700)
  },
 // deactivated被 keep-alive 缓存的组件失活时调用。即  离开该组件时调用 
  deactivated() {
   // 保存滚动条位置
    this.scrollTop = this.$refs.productionDeliveryTable.$refs.deeTable.$refs.deeTable.$refs.deeTable.bodyWrapper.scrollTop
    this.scrollTopBottom = this.$refs.detailTable && this.$refs.detailTable.$refs.deeTable.$refs.deeTable.$refs.deeTable.bodyWrapper.scrollTop
  }
  }

网上看到还有一种做法就是使用全局指令, 数据定义在vuex中, 但是这样的场景就只适合在单个界面使用, 如果多个界面都使用的话会导致所有使用该指令的表格滚动的位置都是一样的

具体想了解可以参考下方的链接
keep-alive里的element表格缓存滚动条
还有跳转详情页保留滚动条的
使用keep-alive时,el-table的滚动条设置问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值