vue中keep-alive实现前进刷新后退不刷新

利用keep-alive标签实现前进刷新后退不刷新

需求:路由前进式能够刷新数据, 返回时页面保存之前的操作.

>修改App.vue中router-view, 根据路由中meta字段设置的变量判断是否被展示

<template>
  <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>
</template>

>在router/index.js中添加meta字段

{
     path: ‘/PointsList‘,
     name: ‘PointsList‘,
     component: () => import(‘@/views/PointsList‘),
     meta: {
          keepAlive: true, // 判断该组件是否需要缓存
          isBack: false // 判断是不是返回操作
     }
}

>在对应的组件中

手动刷新之后没有了缓存数据, 这时返回也需要重新加载页面获取数据, 这里在data中定义变量判断

   data() {
     return {
       isFirstEnter:false // 定义变量来判断是否第一次进入,默认false
     };
   }

created中把isFirstEnter变为true,说明是第一次进入或刷新了页面

created() {
     this.isFirstEnter=true;
     // 只有第一次进入或者刷新页面后才会执行此钩子函数
     // 使用keep-alive后(2+次)进入不会再执行此钩子函数
 }

beforeRouteEnter中判断是从哪个页面过来的

beforeRouteEnter(to, from, next) {
    if (from.name == "page") {
      // 这个name是下一级页面的路由name
      to.meta.isBack = true; // 设置为true说明你是返回到这个页面,而不是通过跳转从其他页面进入到这个页面
    }
    next();
  }

activated中执行获取数据的方法

因为这个页面需要缓存。只有第一次进入时才会执行created和mounted方法,再次进入就不执行了。而activated每次进入都执行,所以在这个钩子函数中获取数据

   activated() {
     if(!this.$route.meta.isBack || this.isFirstEnter){
         // 如果isBack是false,表明需要获取新数据,否则就不再请求,直接使用缓存的数据
         // 如果isFirstEnter是true,表明是第一次进入此页面或用户刷新了页面,需获取新数据
         this.str=‘‘// 把数据清空,可以稍微避免让用户看到之前缓存的数据
         this.getData();
     }
     // 恢复成默认的false,避免isBack一直是true,导致下次无法获取数据
     this.$route.meta.isBack=false
     // 恢复成默认的false,避免isBack一直是true,导致每次都获取新数据
     this.isFirstEnter=false;

   }

原文地址:https://www.cnblogs.com/---godzilla---/p/11525035.html

时间: 2024-08-04 10:02:40

vue中keep-alive实现前进刷新后退不刷新的相关文章

vue单页应用前进刷新后退不刷新方案探讨

引言 前端webapp应用为了追求类似于native模式的细致体验,总是在不断的在向native的体验靠拢:比如本文即将要说到的功能,native由于是多页应用,新页面可以启用一个的新的webview来打开,后退其实是关闭当前webview,其上一个webview就自然显示出来:但是在单页的webapp应用中,所有内容其实是在一个页面中展示的,不存在多页的情况,这时就需要前端开发来想办法实现相应的体验效果. 首先需要说明一下,本文所说的前进刷新后退不刷新是指组件是否重新渲染,比如列表A页面,点击

vue 实现前进不刷新后退刷新

引言: 最近的vue单页面项目要实现一个利用页面缓存的优化, 即前进刷新页面,后退不刷新页面的功能, 并且并列的页面也要实现缓存的效果. 举例: A页面, B页面, C页面 keep-alive: 想要是页面缓存就要用到keep-alive这个标签, 把keep-aline包裹router-view就能事项页面缓存: <keep-alive> <router-view class="Router" ></router-view> </keep-

vue中router以及route的使用

路由基本概念 route,它是一条路由. { path: '/home', component: Home } routes,是一组路由. const routes = [ { path: '/home', component: Home }, { path: '/about', component: About } ] router可以理解为一个容器,或者说一种机制,它管理了一组route.简单来说,route只是进行了URL和函数的映射,而在当接收到一个URL之后,去路由映射表中查找相应的函

vue中$router以及$route的使用

路由基本概念 route,它是一条路由. { path: '/home', component: Home } routes,是一组路由. const routes = [ { path: '/home', component: Home }, { path: '/about', component: About } ] router可以理解为一个容器,或者说一种机制,它管理了一组route.简单来说,route只是进行了URL和函数的映射,而在当接收到一个URL之后,去路由映射表中查找相应的函

WP7 浏览器控件WebBrowser历史记录、前进、后退、刷新功能实现

由于要在应用程序内部访问网页,不跳出应用.所以要实现一个浏览器.但是悲催的事windows phone8 的WebBrowser控件已经支持了像CanGoBack ,CanGoForward,GoBack,GoForward等这些功能,但是wp7没有就实现了几个前进后退几个功能.用在page里面也很简单,实现的效果如下图所示. 因为使用十分简单.和windows phone8上的WebBrowser一样的.我就直接给控件的代码,就帖使用的代码了. 代码如下,注释也都写的比较清楚. using S

better-scroll在vue中的应用

在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 微信 -> 钱包->滴滴出行"体验效果. 什么是 better-scroll better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写,它和 iscroll 的主要区别在 这里 .better-scroll 也很强大,不仅可以做普通的滚动列表,还可以做轮播图.picker 等等. 不少同学可能用过 better-scroll,我收到反馈最多

L--怎样让用户点击浏览器后退按钮刷新后退页面的验证码

介绍 项目需要,怎样让用户点击浏览器后退按钮刷新后退页面的验证码,通过cookie来解决 方法一(通过设置前台html)(失败) 本想通过控制html的http-equiv属性来解决问题,如下 http-equiv属性 1.<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"> 和 <meta http-equiv="Content-Lan

better-scroll在vue中的坑

在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 也可以是横向滚动的导航栏,如图所示: 可以打开"微信 -> 钱包->滴滴出行"体验效果. 我们在实现这类滚动功能的时候,会用到我写的第三方库,better-scroll. 什么是 better-scroll better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写,它和 iscroll 的主要区别在这里.better-scroll

防止刷新/后退引起的重复提交问题的Java Token代码,非Struts

贴子转自http://hi.baidu.com/bobylou,转之前并没有验证文章里的方法是不是有效,估计原作者把它放到blog之前应该做过测试了吧. Struts本身有一套完善的防止重复提交表单的Token(令牌)机制,但笔者目前的项目自写的framework没有用到Struts,故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制.不难,容易实现. 实现原理:一致性.jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把