vue跳转页面后返回不刷新且记录历史滚动条停留位置 (实现了根据不同页面来设置是否刷新记录的功能)

这篇具有很好参考价值的文章主要介绍了vue跳转页面后返回不刷新且记录历史滚动条停留位置 (实现了根据不同页面来设置是否刷新记录的功能)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、页面返回后不刷新

        1.在路由(router/index.js)中,对不刷新的页面设置:

meta: {
        keepAlive: true    //true为需要缓存,false为不需要缓存(不需要的也可以不加)
      },

        2.在app.vue中设置:

<div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
  </div>

这时返回就不会触发created和mounted

二、记录滚动条位置,并在页面显示时设置它:

        1.在data中定义

scrollTop: 0,

        2.挂载:

    //离开路由之前执行的函数,可用于页面的反向传值,页面跳转。
    beforeRouteLeave(to, from, next) {
      console.log("1212-beforeRouteLeave")
      // 记录滚动条位置
      this.scrollTop = document.documentElement.getElementsByClassName("itemBoxs")[0].scrollTop || 0; //组件写法
      this.scrollTop = document.documentElement.getElementById('app').scrollTop || 0; //全局写法
      console.log("this.scrollTop", this.scrollTop)
      next()
    },
    // 组件激活时触发
    activated() {
      // 还原滚动条位置
      console.log("1212-activated")
      document.getElementsByClassName("itemBoxs")[0].scrollTop = this.scrollTop || 0; //组件写法
      document.getElementById('app').scrollTop = this.scrollTop || 0; //全局写法
    },

以上就实现了返回页面后滚动条记忆的功能啦!

如果想实现分情况决定是否记忆滚动条以及刷新组件数据,请继续往下看:

在上述keep-alive的基础上

1.定义全局变量(不要在data中定义!!!)

var isRefresh = false; //定义是否需要刷新

vue跳转页面后返回不刷新且记录历史滚动条停留位置 (实现了根据不同页面来设置是否刷新记录的功能)

注: 之所以在定义全局变量isRefresh而不在data里定义是因为当生命周期进入beforeRouteEnter的时候,此时当前页面还没有被mounted,因此我们是获取不到当前实例this的指向的,变量值也取不到。

2.定义beforeRouteEnter

 //路由进入前判断是否重新加载还是缓存
  beforeRouteEnter(to, from, next){
    if(from.name == 'textbookModeSelection'){ //哪个页面 进入需要刷新
      isRefresh = true; //需要刷新
    }else{
      isRefresh = false;
    }
    next()
  },

3.定义activated

// 组件激活时触发
  activated() {
    if(isRefresh) {
      //刷新
      this.chooseCourseIndex = null; //清空需要的数据
      document.getElementsByClassName("itemBoxs")[0].scrollTop = 0; //置顶滚动条
      this.init(); //调用获取数据方法
    }else{
      //不刷新  还原滚动条位置
    document.getElementsByClassName("itemBoxs")[0].scrollTop = this.scrollTop || 0;
    }

注: keep-alive之后不会执行created,mounted钩子了,在activated中判断需要刷新之后,将列表数据初始化,发起请求即可,不刷新时则返回到列表记录的滚动条的位置

4.定义beforeRouteLeave

//路由离开前执行
beforeRouteLeave(to, from, next) {
    // 记录滚动条位置
    this.scrollTop = document.documentElement.getElementsByClassName("itemBoxs")[0].scrollTop || 0;
    next()
  },

完成!文章来源地址https://www.toymoban.com/news/detail-474732.html

到了这里,关于vue跳转页面后返回不刷新且记录历史滚动条停留位置 (实现了根据不同页面来设置是否刷新记录的功能)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VUE路由跳转并刷新页面(框架层实现)

    前言         网上找了很多办法,都需要开发者在页面内单独实现,或者是刷新整个浏览器,感觉并不是特别舒服。因此,我考虑可以在框架层去实现路由跳转刷新。         思路如下:                 1、重定向至临时界面(用户无感知)                 2、打开临时

    2024年02月11日
    浏览(58)
  • 关于vue路由跳转后的页面不会刷新的解决办法

    做uni项目的时候遇到的情况:1,父组件页面刷新了之后 需要触底加载的子组件能触底加载,否则不能加载。2,子组件不能触底加载,只需要刷新之后就能触底加载。以上的刷新不包括下拉刷新。3. 可能因为包了一层tab页导致跳转进页面没有请求数据的问题。 我的解决办法是

    2024年02月11日
    浏览(63)
  • vue列表跳转详情,记录列表滚动不变

    记录主元素 当引入keep-alive的时候,页面第一次进入,钩子的触发顺序created- mounted- activated,退出时触发deactivated。 当再次进入(前进或者后退)时,只触发activated。

    2024年02月07日
    浏览(52)
  • vue通过router地址传参跳转同一路由页面,页面不刷新的解决办法

    vue、 vue-router@4 记录一下最近遇到的vue路由页面间的跳转的问题,其中就涉及到了不同路由的跳转(/a/b1 = /a/b2)、相同路由不同参数间的跳转(/a/b?c=1 = /a/b?c=2)、相同页面锚点跳转(/a/b#id1 =/a/b#id2) 原因:渲染的是同一组件 解决:可以在不刷新的页面通过监听route,重新加载

    2024年02月04日
    浏览(60)
  • 解决vue3项目跳转同一页面数据不刷新的问题

            原因:router-view使用了keep-alive组件,会被缓存,而vue-router的切换不用于传统的页面切换。是路由之间的切换,组件之间的切换,引用相同组件的时候,会被直接调用缓存里面的而不会调用created(),onMoun ted()函数。         如图所示:要实现的功能是点击每一个

    2024年02月11日
    浏览(36)
  • vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常[已解决]

    vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常,在网上寻找很久说是keepAlive的原因,后来看了看我的代码~ 原来的代码: 改后的代码: 由此可见,根元素一定要由一个div去包裹住! template必须有且只能有一个div 在这样才会正常显示~ 原理: 这里我们要先

    2023年04月27日
    浏览(59)
  • vue-element-admin vue设置动态路由 刷新页面后出现跳转404页面Bug 解决方法

    做项目时遇到的这个bug,因为除了跳404之外也没太大影响,之前就一直放着没管,现在项目基本功能实现了,转头处理了一下,现在在这里记录一下解决方法 这个bug的具体情况是:设置了动态路由之后,不同的用户登录之后显示了不同的侧边栏,在侧边栏点击菜单,渲染对应

    2024年04月28日
    浏览(59)
  • Vue 解决route-link路由跳转时页面不刷新问题

    1.分析 在使用route-link跳转路由时,每次跳转,页面都不会刷新。是因为路由跳转并非页面刷新,而我们获取数据的方法都是写在created钩子函数中,所以,created并不会每次都执行,从而导致页面数据没有刷新。 2.解决方法 在router-view标签中加入:key=\\\"$route.fullPath\\\"即可

    2024年02月11日
    浏览(38)
  • uniapp微信小程序 页面返回使用navigateBack,返回后页面不刷新问题解决方案

    尝试了众多方法,比如vuex,本地缓存,都不行 1,如果是页面之间的跳转 可以使用onShow生命周期请求数据 2,组件之间的跳转,使用redirectTo,通过关闭当前页面,跳转到指定页面再加载,这种适合二级页面到三级页面数据不更新问题 3,当一级页面使用了某个组件,组件内跳转

    2024年02月15日
    浏览(59)
  • uni-app返回上一个页面并进行页面刷新

    适用两个不同的页面跳转,返回上一个页面保存并刷新修改后的数据(也解决了uni-app的navigateBack返回不刷新的方法之一) 当前页: 上一页: 思路: 1、用getCurrentPages()获取打开的页面 2、保存当前页面和上一个页面 提示:不确定是不是从当前页跳转到上一页就console.log(pages[pa

    2024年02月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包