vue 如何做到一个页面开多个Tag标签

一、实现效果

最近遇到一个需求想要同一个菜单能多次打开,生成多个Tag标签,废话不多说,上图

form菜单,我打开了3个窗口, 窗口的内容是独立的,我是通过动态路由的方式实现的,感觉效果不是很理想,代码如下

二、项目目录结构

三、核心代码

// vuex不做判断,直接插入集合
state: {
   ...
    barList: []
},
SET_BAR_LIST: (state, content) => {
   // let ind = state.barList.findIndex(el => el.key === content.key)
   // if(ind == -1) {
   //     state.barList.push(content)
   // }
   state.barList.push(content)
},

// xTabbar页面取到vuex的数据
computed: {
   menus() {
     return this.$store.getters.barList
   }
},

// sideMenu页面 菜单点击时生成Tag集合
handleSelect(keyPath, key)  {
  let num = Math.random()
  this.$router.push({name: key, params: {id: num}})
  this.$store.dispatch('setBarList', { keyPath, key, num})
}
// 路由配置
{
  path: '/example',
  component: Layout,
  redirect: '/example/home',
  name: 'Example',
  meta: {
    title: 'Example',
    icon: 'example'
  },
  children: [{
    // path: 'form',
    path: 'form/:id', // 用于多tag
    name: 'Form',
    component: () => import('@/page/form.vue'),
    meta: {
      title: 'Form',
    }
  },
  {
     // path: 'about',
     path: 'about/:id', // 用于多tag
     name: 'About',
     component: () => import('@/page/about.vue'),
     meta: {
       title: 'About',
     }
   }
 ]
},

 ———————————————————————————我是分割线——————————————————————————

四、升级改造

以前是用随机数,太low,今天进行优雅的升级

首先将路由进行改造,去除'form/:id'中的‘/’

{    
  path: 'form:id', // 用于多tag
  name: 'Form',
  component: () => import('@/page/form.vue'),
  meta: {
     title: 'Form',
  }
}

 然后菜单页面进行改造,num不再使用随机数

// 点击菜单,生成Tag标签集合
    handleSelect(keyPath, key) {
      let num = this.barList.filter(e => e.key == key).length
      this.$router.push({name: key, params: {id: num}})
      // 将地址,名称,随机数存入vuex,标签点击时可以跳转回去
      this.$store.dispatch('addBarList', { keyPath: keyPath.replace(':id', num), key, num})
    },

最后实现的效果,form地址后面递增加1 ,

 ——————————————————————————我是分割线———————————————————————————

五、额外效果

额外效果展示,右键关闭,tag左右滑动,实现效果如有需要,请评论区留言

六、仓库地址

vue-manage-template: vue2.0动态路由管理系统模板

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值