vue3.0列表页面做缓存的方法代码

 更新时间:2024年04月19日 10:57:40   作者:悠悠~飘  
很多时候为了让提高用户的体验感,在页面上添加缓存,是十分有必要的, 下面这篇文章主要给大家介绍了关于vue3.0列表页面做缓存的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一.设置动态keepalive

   <router-view v-slot="{ Component, route }">
            <keep-alive :include="cacheViewsState">
              <component :is="Component" />
            </keep-alive>
   </router-view>

可以将要缓存的页面作为vuex全局变量储存 

const cacheViewsState = store.state.app.cachedViews

将cachedViews 存入vuex:

  state: {
  
    cachedViews: ['listPage']
  },
mutations:{

 ADD_CACHED_VIEW: (state, view) => {
      if (state.cachedViews.includes(view)) return
      state.cachedViews.push(view)
    },
 DEL_CACHED_VIEW: (state, view) => {
      const index = state.cachedViews.indexOf(view)
      index > -1 && state.cachedViews.splice(index, 1)
    }
},
  actions: {
//添加缓存组件
    addCachedView({ commit }, view) {
      commit('ADD_CACHED_VIEW', view)
    },
    //删除缓存组件
    delCachedView({ commit, state }, view) {
      return new Promise((resolve) => {
        commit('DEL_CACHED_VIEW', view)
        resolve([...state.cachedViews])
      })
    }
}

二.页面初始化数据缓存处理

 将页面导出命名空间设置为动态缓存页面名单

<script>
export default {
  name: 'listPage'
}
</script>

onActivated 注册一个回调函数,若组件实例是 <KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用。

这个钩子在服务器端渲染期间不会被调用。

onActivated(() => {
  getList() // 初始化列表
})

附:Vue3.0使用keep-alive实现页面缓存不刷新

1.应用场景

1.列表页进入详情页,再从详情页返回列表页;列表页缓存不刷新。保持原来选中的查询参数以及当前页

2.某个新增页面分为两步,分为A页面和B页面;当第一步A页面信息填好后,点击下一步到第二步B页面。再返回到第一步A页面,A页面信息不丢失。同理第二步填好信息返回到第一步,再回到第二页,第二页页面信息不丢失。

2.解决步骤

1.App.vue

//isRouterAlive:通过先设置isRouterAlive为false再设置为true可实现组件的销毁
<router-view v-slot="{ Component }" v-if="isRouterAlive">
    <keep-alive>
          <component :is="Component" v-if="_this.$route.meta.keepAlive" :key="$route.name" />
    </keep-alive>
    <component :is="Component" v-if="!_this.$route.meta.keepAlive" />
</router-view>

2.router.js

//设置meta
const routes: Array<RouteRecordRaw> = [
   {
        path: 'list',
        name: 'list',
        meta: { keepAlive: true, cacheList: ['detail'] },
        component: () => import('@/views/list.vue')
    },
]
//路由拦截
router.beforeEach((to, from, next) => {
   //从cacheList中的任何一个页面返回,当前页面缓存
   const cacheList: any = to.meta.cacheList
   if (cacheList) {
      if (cacheList.indexOf(from.name) > -1) {
          to.meta.keepAlive = true
      } else {
          //解决第一次不缓存问题
          if (from.name) {
            to.meta.keepAlive = false
          } else {
            to.meta.keepAlive = true
          }
        }
      }
      next()  
}

3.list.vue

import { defineComponent, nextTick } from 'vue'
import { onBeforeRouteLeave } from 'vue-router'
export default defineComponent({
  name: 'list',
  setup() {
     onBeforeRouteLeave((to, from, next) => {
      //当即将访问的界面不是detail则销毁组件,以免上一次缓存信息存在
      const cacheList: any = ['detail']
      if (cacheList.indexOf(to.name) === -1) {
        //销毁缓存信息(vue3没有_this.$destory()方法,所以通过v-if实现组件的销毁)
       //vuex改变全局变量isRouterAlive的值
        _this.$store.commit('menu/changeRouterAlive', false)
        nextTick(() => {
          _this.$store.commit('menu/changeRouterAlive', true)
        })
      }
      next()
    })
  }
})

总结 

到此这篇关于vue3.0列表页面做缓存的文章就介绍到这了,更多相关vue3.0列表页面缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue-cli3 热更新配置操作

    vue-cli3 热更新配置操作

    这篇文章主要介绍了vue-cli3 热更新配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue2 SSR渲染根据不同页面修改 meta

    Vue2 SSR渲染根据不同页面修改 meta

    本篇文章主要介绍了Vue2 SSR渲染根据不同页面修改 meta,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • vue3+vite使用vite-plugin-svg-icons插件显示本地svg图标的方法

    vue3+vite使用vite-plugin-svg-icons插件显示本地svg图标的方法

    这篇文章主要介绍了vue3+vite使用vite-plugin-svg-icons插件显示本地svg图标的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • Vue组件之自定义事件的功能图解

    Vue组件之自定义事件的功能图解

    本文通过图文并茂的形式给大家介绍了Vue组件之自定义事件的功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 解决vue3项目中el-menu不兼容SSR问题

    解决vue3项目中el-menu不兼容SSR问题

    这篇文章主要介绍了解决vue3项目中el-menu不兼容SSR问题,需要的朋友可以参考下
    2023-12-12
  • vue3使用canvas的详细指南

    vue3使用canvas的详细指南

    这篇文章主要给大家介绍了关于vue3使用canvas的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用vue3具有一定的参考学习价值,需要的朋友可以参考下
    2023-04-04
  • vuex如何重置所有state(可定制)

    vuex如何重置所有state(可定制)

    在正式场景中我们经常遇到一个问题,就是登出页面或其他操作的时候,我们需要重置所有的vuex,让其变为初始状态,那么如何重置呢,下面就跟随小编一起来了解一下
    2019-01-01
  • 详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持

    详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持

    本篇文章主要介绍了详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • vue项目打包发布到Nginx后无法访问后端接口的解决办法

    vue项目打包发布到Nginx后无法访问后端接口的解决办法

    这篇文章主要给大家介绍了关于vue项目打包发布到Nginx后无法访问后端接口的解决办法,记录一下项目需要注意的地方,方便以后快速使用,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • 基于Vite2.x的Vue 3.x项目的搭建实现

    基于Vite2.x的Vue 3.x项目的搭建实现

    这篇文章主要介绍了基于Vite2.x的Vue 3.x项目的搭建实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论