vue elementUI使用tabs与导航栏联动


Posted in Javascript onJune 21, 2019

不使用tabs标签页时,点击导航菜单,router-view映射相应的组件即可显示页面。但我们想在点击导航栏时在tabs中映射相应的组件,这就需要使用tabs组件
在slider.vue中点击路由后,把当前选择的路由@select使用bus传出去

<el-menu class="sidebar-el-menu" :default-active="onRoutes" :collapse="collapse" background-color="#eeefef" text-color="#666" active-text-color="#20a0ff" unique-opened router @select="addTab">

 <!-- 一级菜单 -->
  <template v-for="item in slidebarData" >
  <el-submenu v-if="item.subs && item.subs.length" :index="item.index" :key="item.index">
   <template slot="title"><i :class="item.icon"></i><span>{{item.title}}</span></template>

   <!-- 二级菜单 -->
   <template v-for="itemChild in item.subs">
   <el-submenu v-if="itemChild.subs && itemChild.subs.length" :index="itemChild.index" :key="itemChild.index" class="erji">
    <template slot="title"><i :class="itemChild.icon"></i><span>{{itemChild.title}}</span></template>

    <!-- 三级菜单 -->
    <el-menu-item v-for="itemChild_Child in itemChild.subs" :index="itemChild_Child.index" :key="itemChild_Child.index">
    <i :class="itemChild_Child.icon"></i><span slot="title">{{itemChild_Child.title}}</span>
    </el-menu-item>
   </el-submenu>

   <el-menu-item v-else :index="itemChild.index" :key="itemChild.index"><i :class="itemChild.icon"></i><span slot="title">{{itemChild.title}}</span></el-menu-item>
   </template>
  </el-submenu>

  <el-menu-item v-else :index="item.index" :key="item.index"><i :class="item.icon"></i><span slot="title">{{item.title}}</span></el-menu-item>
  </template>

 </el-menu>

使用bus把路由信息传出

import bus from '../common/bus';
methods: {
 addTab(key,keyPath) {
 console.log(key,keyPath)
 bus.$emit('navPath',keyPath)
 }
},

在tabs.vue中接收

<template>
 <div id="tabs">
 <el-tabs type="card" v-model="tabsVal" @tab-remove="closeTab" @tab-click="tabclick">
  <el-tab-pane v-for="item in tabList" :key="item.name" :name="item.name" :label="item.title" :closable="item.closable" >
        <component :is="item.component"></component>
      </el-tab-pane>
 </el-tabs>
 </div>
</template>

<script>
 import searchFor from '../page/ContentManagement/Class/searchFor.vue';
 import bus from '../common/bus';
 export default {
 data() {
  return {
  inputVisible: false,
  navPath: '',
  tabsVal: "searchFor",
  tabList: [
   {
        title: '热门搜索',
        name: 'searchFor',
        disabled: true,
        closable: false,
        component: searchFor
      }
  ]
  }
 },
 methods: {
  closeTab(tag) {//关闭tabs
  var tabListName = []
  for(let i = 0; i < this.tabList.length; i++){
   tabListName[i] = this.tabList[i].name;
  }
  console.log(tabListName)
  this.tabList.splice(tabListName.indexOf(tag), 1);
  this.tabsVal = "searchFor";
  this.$router.push("searchFor");
  },
  tabclick(val) {
  console.log(val)
  this.$router.push(val.name);
  //点击tabs触发路由跳转,到相应路由
  }
 },
 mounted () {
     bus.$on('navPath',(name,val) =>{//处理传过来的值
      console.log(name)
       var titname;
       if(name[name.length -1] == 'searchFor'){
        titname = '热门搜索'
       }else if(name[name.length -1] == 'Courier1'){
        titname = '套课列表'
       }else if(name[name.length -1] == 'Courier2'){
        titname = '小节列表'
       }else if(name[name.length -1] == 'Courier3'){
        titname = '套课分享'
       }
       if (this.tabList.filter(f => f.name == name[name.length -1]) == 0) {
        var component = resolve => require([`../page/ContentManagement/${name[0]}/${name[name.length -1]}`], resolve)//合伙人管理
        this.tabList.push({
          title: titname,
          name: name[name.length -1],
          disabled: false,
          closable: true,
          component: component
        })
       }
       this.tabsVal = name[name.length -1]
     });
    }
 }
</script>

<style scoped>
 #tabs {
 position: fixed;
 right: calc(2vw - 2px);
 top: 100px;
 z-index: 5;
 width: calc(96% - 189px);
 height: 38px;
 background: #f0f0f0;
 border-bottom: 4px solid #ccc;
 border-top: 4px solid #ccc;
 padding-left: 10px;
 }
 
 .el-tag {
 margin: 3px;
 }
 
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
两个SUBMIT按钮,如何区分处理
Aug 22 Javascript
javascript读取xml
Nov 04 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
js截取小数点后几位的写法
Nov 14 Javascript
js购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
jQuery获取table行数并输出单元格内容的实现方法
Jun 30 Javascript
bootstrap实现动态进度条效果
Mar 08 Javascript
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 Javascript
vue实现带复选框的树形菜单
May 27 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
Jun 06 Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 #Javascript
vue配置文件实现代理v2版本的方法
Jun 21 #Javascript
微信小程序自定义多列选择器使用详解
Jun 21 #Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 #Javascript
Vue多环境代理配置方法思路详解
Jun 21 #Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 #Javascript
使用express来代理服务的方法
Jun 21 #Javascript
You might like
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php获取远程文件大小
2015/10/20 PHP
PHP实现微信对账单处理
2018/10/01 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
python实现单机五子棋
2020/08/28 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
护理专业推荐信
2013/11/07 职场文书
房屋公证委托书
2014/04/03 职场文书
如何写好自荐信
2014/04/07 职场文书
七夕情人节促销方案
2014/06/07 职场文书
社团活动总结书
2014/06/27 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
机械生产实习心得体会
2016/01/22 职场文书
创业计划之特色精品店
2019/08/12 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
python实现局部图像放大
2021/11/17 Python