标签导航栏

在远古时代,实现单页面可以用jquery + iframe。然后会在页面中加入tag标签记录浏览过的页面,当页面刷新后标签清除,回到首页。

本项目也有类似的功能,当路由切换的时候,在tags-view中进行操作,新增、删除或者更新。

右键tag标签有3个操作:

  • 关闭:关闭选中的tag
  • 关闭其他:关闭选中外的tagaffix 除外)
  • 关闭所有:关闭所有的tagaffix 除外)

图例

标签导航

配置

标签导航栏功能也是在src/router路由文件里面配置的,一般都配置在一级路由以外的路由中:

截取部分代码: @/router/index.js
















 








// ...
export const layoutRoutes = [
  {
    path: '',
    redirect: 'dashboard',
    component: Layout,
    children: [
      {
        path: 'dashboard',
        name: 'dashboard',
        component: () => import('@/views/dashboard'),
        meta: {
          icon: 'icon-shouye',
          activeMenu: '/dashboard',
          title: '首页',
          affix: true
        }
      }
    ]
  },
  ...menuRouters
]
// ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

以上代码的affix属性:当配置为true是(如首页)。就会永远的保留在标签导航栏上,不能删除,且保留在标签栏的前列。

visitedViews && cachedViews

tags-view同时在vuex中维护了两个数组。

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

注意事项

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



 









  {
    path: 'page',
    name: 'page-table',
    component: () =>
        import(/* webpackChunkName: "table" */ './../views/table/page'),
    meta: {
      activeMenu: '/table/page',
      noCache: false,
      title: '页面'
    }
  }
1
2
3
4
5
6
7
8
9
10
11

 


export default {
  name: 'page-table'
}
1
2
3

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

最后更新时间: 10/8/2019, 6:12:45 PM