若依Vue设置切换Tab栏菜单的时候不刷新,还可以+设置点击侧边菜单的时候刷新

先赞再看养成习惯,谢谢你的点赞

若依切换tab菜单栏的时候老是刷新,比如原本在 班级tab菜单 查看第三页的班级信息,然后这时候想看看 老师tab菜单 ,点击过去之后看完,想回到 班级tab菜单继续看班级信息,结果点回来的时候刷新了,又给你回到了第一页。这样是比较麻烦的,所以我们要缓存页签。

官方的文档是这样的 (后面还有我自己理解的跟着我的思路走就行了)

若依官网文档
页签缓存

由于目前 keep-alive 和 router-view 是强耦合的,而且查看文档和源码不难发现 keep-alive 的 include (opens new window)默认是优先匹配组件的 name ,所以在编写路由 router 和路由对应的 view component 的时候一定要确保 两者的 name 是完全一致的。(切记 name 命名时候尽量保证唯一性 切记不要和某些组件的命名重复了,不然会递归引用最后内存溢出等问题)

DEMO:

//router 路由声明
{
  path: 'config',
  component: ()=>import('@/views/system/config/index'),
  name: 'Config',
  meta: { title: '参数设置', icon: 'edit' }
}

//路由对应的view  system/config/index
export default {
  name: 'Config'
}

一定要保证两者的名字相同,切记写重或者写错。默认如果不写 name 就不会被缓存,详情见issue

提示

在系统管理-菜单管理-可以配置菜单页签是否缓存,默认为缓存

说大白话就是下面的步骤 

如果你是动态路由,在admin这里设置菜单的路由地址,然后开启缓存

然后你的  vue页面,也就是这个菜单的页面里面的 name 要大驼峰命名

例如我的客户信息菜单的 vue页面

name: 要大驼峰 ,例如你刚才的路由地址填的是  test, 那你在vue组件里面的name 就要写 Test

如果你的路由地址 原本就是 Test ,那你vue组件的name也是 Test

如果你是 静态路由(注意)

路由名称是什么

那你 vue组件的name就是什么

改完之后,不仅tab菜单切换不刷新,连侧边栏的菜单切换也不刷新了,这可能不是我们想要的效果

如果你想点击侧边栏的菜单能刷新的话,按照下面的步骤继续

找到  /layout/sidebar/SidebarItem.vue  ,对el-menu-item增加一个点击事件

代码事件逻辑如下

      //比较确定是否为当前页面

      if (this.$route.name == item.name) {

        //如果是当前页面刷新页面

        this.$store.dispatch('tagsView/delCachedView', this.$route).then(() => {

          const { fullPath } = this.$route;

          this.$router.replace({

            path: '/redirect' + fullPath

          })

        })

      } else {

        //如果不是当前页面,清除keepalive缓存

        this.$store.dispatch("tagsView/delCachedView", item);

      }

这样 ,我们点击切换tab菜单就不会刷新,但是我们点击侧边栏菜单的时候就会刷新切换过去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值