Vue实现一个带有缓存功能的Tab页签功能

 更新时间:2024年08月23日 10:38:46   作者:前端学步  
在现代 Web 应用中,Tab 页签功能是非常常见的一种交互模式,它可以帮助用户在不同的视图间快速切换,而不会丢失当前视图的状态,本文将介绍如何在 Vue 项目中实现一个带有缓存功能的 Tab 页签功能,需要的朋友可以参考下

概述

在现代 Web 应用中,Tab 页签功能是非常常见的一种交互模式。它可以帮助用户在不同的视图间快速切换,而不会丢失当前视图的状态。为了进一步提升用户体验,我们可以通过 keep-alive 组件来缓存已经打开的视图,这样即使用户离开并再次回到这个视图,也可以看到之前的状态。

本文将介绍如何在 Vue 项目中实现一个带有缓存功能的 Tab 页签功能。

效果实现

点击左侧菜单栏,添加tab页及页面缓存,关闭tab页,删除页面缓存

功能实现(只展示核心代码)

一、使用 keep-alive 缓存路由

为了实现页面缓存,我们需要使用 keep-alive 组件。首先,在 App.vue 中引入 keep-alive 并

将其包裹在 <router-view> 外面。同时,我们可以使用 include 属性来指定哪些组件应该被缓存。

<!-- 缓存路由 -->
<keep-alive :include="cacheViews">
    <router-view></router-view>
</keep-alive>

二、点击左侧菜单,添加页签并添加缓存标记

在左侧菜单栏组件(例如 MenuTree.vue)中,我们需要监听用户的点击事件,以便在点击某个菜单项时添加新的页签。同时,我们也需要将该组件的 name 添加到 cachedViews 数组中,以标记该组件应被缓存。请注意,这里的 name必须与页面组件name、路由name保持一致。

// 点击左侧菜单时添加tab页签,添加缓存页面
        const findIndex = this.existedTabs.findIndex(v => {
            return v.name == item.name
        })
        if(findIndex == -1) {
            // tab页签中不存在,push进去
            this.existedTabs.push(item);
            this.cacheViews.push(item.name)
        }
        this.$store.commit("saveTabsList", this.existedTabs); // 保存tab标签页
        this.$store.commit("saveCacheViews", this.cacheViews); // 保存需要缓存页面组件

三、关闭页签,删除缓存标记

在关闭页签时,我们需要从 cachedViews 数组中移除对应的组件名称,以取消对该组件的缓存。

// 关闭tab页签时,删除缓存标记
        const findIndex = this.tabsListArray.findIndex((v) => {
            return v.name == targetName;
        });
 
        if (findIndex > -1) {
            this.tabsListArray.splice(findIndex, 1);
            const findIndexCacheViews = this.cacheViews.indexOf(targetName);
            if (findIndexCacheViews > -1) {
            this.cacheViews.splice(findIndex, 1);
            }
        }
        this.$store.commit("saveTabsList", this.tabsListArray);
        this.$store.commit("saveCacheViews", this.cacheViews);
        if (targetName == this.activename) {
        // 当前菜单,跳转至后面/前面一个菜单
        if (findIndex < this.tabsListArray.length) {
          this.$router.push({
            name: this.tabsListArray[findIndex].name,
          });
        } else {
          this.$router.push({
            name: this.tabsListArray[findIndex - 1].name,
          });
        }
      }

总结来说,通过上述步骤,我们成功实现了动态添加菜单页签并缓存功能。在实际应用中,还需要考虑一些细节,如处理未缓存页面的刷新等。希望这篇文章能对您有所帮助!

到此这篇关于Vue实现一个带有缓存的Tab页签功能的文章就介绍到这了,更多相关Vue实现Tab页签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue前端实现截图功能的简单步骤

    Vue前端实现截图功能的简单步骤

    本文介绍了如何使用html2canvas库来实现HTML页面或某个元素的截图功能,文中通过代码介绍的非常详细,需要注意的是此方法只能在浏览器环境中使用,需要的朋友可以参考下
    2024-10-10
  • 解决vue-cli-service不是内部或外部命令也不是可运行的程序或批处理文件的报错问题

    解决vue-cli-service不是内部或外部命令也不是可运行的程序或批处理文件的报错问题

    这篇文章主要介绍了解决vue-cli-service不是内部或外部命令也不是可运行的程序或批处理文件的报错问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Vue Components 数字键盘的实现

    Vue Components 数字键盘的实现

    这篇文章主要介绍了Vue Components 数字键盘的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Vue-cli项目获取本地json文件数据的实例

    Vue-cli项目获取本地json文件数据的实例

    下面小编就为大家分享一篇Vue-cli项目获取本地json文件数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue.js 解决v-model让select默认选中不生效的问题

    vue.js 解决v-model让select默认选中不生效的问题

    这篇文章主要介绍了vue.js 解决v-model让select默认选中不生效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • axios发送post请求,提交图片类型表单数据方法

    axios发送post请求,提交图片类型表单数据方法

    下面小编就为大家分享一篇axios发送post请求,提交图片类型表单数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 详解搭建一个vue-cli的移动端H5开发模板

    详解搭建一个vue-cli的移动端H5开发模板

    这篇文章主要介绍了详解搭建一个vue-cli的移动端H5开发模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Vue毫秒(秒)数值与日期转换实现方式

    Vue毫秒(秒)数值与日期转换实现方式

    本文介绍了Vue将日期转换为毫秒或秒,以及将毫秒或秒转换为日期的方法,并通过实际代码展示如何在页面中调用这些转换函数,以上是个人经验总结,仅供参考
    2026-05-05
  • Vue实现记住账号密码功能的操作过程

    Vue实现记住账号密码功能的操作过程

    这篇文章主要介绍了Vue实现记住账号密码功能,用户登录时若勾选“记住我”功能选项,则将登录名和密码(加密后)存入本地缓存,下次登录页面加载时自动获取保存好的账号和密码(需解密),回显到登录输入框中,下面分享我实现的具体步骤,需要的朋友可以参考下
    2022-07-07
  • vue + axios get下载文件功能

    vue + axios get下载文件功能

    这篇文章主要为大家详细介绍了vue + axios get下载文件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09

最新评论