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 相关文章推荐
原生js实现shift/ctrl/alt按键的获取
Apr 08 Javascript
禁止拷贝网页内容的js代码
Jan 22 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
Apr 26 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
js中split()方法得到的数组长度问题
Jul 19 Javascript
vue 实现边输入边搜索功能的实例讲解
Sep 16 Javascript
Vue.js样式动态绑定实现小结
Jan 24 Javascript
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
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
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
详解js类型判断
2018/05/22 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
python每天定时运行某程序代码
2019/08/16 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
python 函数中的参数类型
2020/02/11 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
担保书怎么写
2014/04/01 职场文书
小学校长开学致辞
2015/07/29 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL