前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《vue3+ts+element-plus 后台管理系统系列五》之 标签栏导航(TagsView)

《vue3+ts+element-plus 后台管理系统系列五》之 标签栏导航(TagsView)

作者头像
星宇大前端
发布2021-02-22 14:58:55
2.3K0
发布2021-02-22 14:58:55
举报
文章被收录于专栏:大宇笔记大宇笔记

vue3-composition-admin 是一个管理端模板解决方案,它是基于vue3,ts和element-plus,项目都是以composition api风格编写。

演示


tagsview 现在的后端管理平台现在基本上成必须了,先看下效果。

在这里插入图片描述
在这里插入图片描述

代码实现


总体思路:

利用keepaliverouteLink解决,数据是通过vuex进行管理。

数据的来源:同样是监听路由变化的时候添加route

代码引用 @/components/tags-views/Index.vue

代码语言:javascript
复制
 watch(() => currentRoute.name, () => {
      addTags()
      moveToCurrentTag()
    })

实现步骤:

  • 切换路由页面,监听路由变化
  • visitedViews 数组收集访问的页面
  • 更新页面

visitedViews && cachedViews


目前 tags-view 维护了两个数组。

  • visitedViews : 用户访问过的页面 就是标签栏导航显示的一个个 tag 数组集合
  • cachedViews : 实际 keep-alive 的路由。可以在配置路由的时候通过 meta.noCache 来设置是否需要缓存这个路由 默认都缓存。

缓存


利用Keepalive缓存,对用的是cachedViews数组里的路由都会被缓存。

AppMain需要设置一下:

代码语言:javascript
复制
 <transition
      name="fade-transform"
      mode="out-in"
    >
      <keep-alive :include="cachedViews">
        <router-view :key="key" />
      </keep-alive>
    </transition>

不需要的这里去掉就行。

Affix 固钉


当在声明路由是 添加了 Affix 属性,则当前tag会被固定在 tags-view中(不可被删除)。

代码语言:javascript
复制
 {
    path: '',
    component: Layout,
    redirect: 'dashboard',
    children: [
      {
        path: 'dashboard',
        component: () => import('@/views/dashboard/index'),
        name: 'Dashboard',
        meta: {
          title: 'dashboard',
          icon: 'dashboard',
          noCache: true,
          affix: true
        }
      }
    ]
  }

注意事项


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

DEMO:

代码语言:javascript
复制
//router 路由声明
{
  path: 'create-form',
  component: ()=>import('@/views/form/create'),
  name: 'createForm',
  meta: { title: 'createForm', icon: 'table' }
}
代码语言:javascript
复制
//路由对应的view  form/create
export default {
  name: 'createForm'
}

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 演示
  • 代码实现
  • visitedViews && cachedViews
  • 缓存
  • Affix 固钉
  • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档