1. Elementui tabs组件内添加组件

1.1. 需求

  1. 今天的一个需求是在后台框架的基础上添加tab页,结果页面如下

  2. 原本上述红框内的内容是不存在的,直接点击左侧菜单栏进行页面跳转,现加了tab标签栏,实现快速的跳转

1.2. 实现

  1. 具体要根据自己的route实现类进行筛选,核心vue如下
<template><div><el-tabs v-model="TabsValue" type="card" closable @tab-remove="removeTab"><el-tab-pane style="border-radius: 3px" v-for="(item, index) in Tabs" :key="item.name" :label="item.title" :name="item.name"><tab-component style="border-radius: 3px;margin: -15px 10px 0px 10px;" :index="index" :name="index"></tab-component></el-tab-pane></el-tabs></div>
</template>
<script>import Vue from 'vue'export default {name: 'TabBar',data(){return {uniqueOpened: true,TabsValue: '',Tabs: [],index:0,tabComponent:{}}},methods: {addOneTab(menu) {var exist = false;for (var i = 0; i < this.Tabs.length; i++) {if (menu.name === this.Tabs[i].name) {exist = true;break}}if (exist === true) {this.TabsValue = menu.name;return}this.Tabs.push({title: menu.name,name: menu.name,content: menu.component});var _this = this;this.tabComponent = Vue.component('tab-component', {render: function (h) {var comp = _this.Tabs[this.index].content;return h(comp)},props: {index: {type: Number,required: true}}});this.TabsValue = menu.name},addTab(e) {let first = "/"+e.split("/")[1];let two = e.split("/")[2];let tempRoutes = this.$router.options.routes;for (let i = 0; i < tempRoutes.length; i++) {let temp = tempRoutes[i];if (temp.path === first) {for (let j = 0; j < temp.children.length; j++) {let child = temp.children[j];if (child.path === two) {let menu = {};menu.name = child.meta.title;menu.component = child.component;this.addOneTab(menu);}}}}},removeTab(targetName) {let tabs = this.Tabs;let activeName = this.TabsValue;if (activeName === targetName) {tabs.forEach((tab, index) => {if (tab.name === targetName) {let nextTab = tabs[index + 1] || tabs[index - 1];if (nextTab) {activeName = nextTab.name;}}});}this.TabsValue = activeName;this.Tabs = tabs.filter(tab => tab.name !== targetName);}}}
</script>
  1. 上述是tab的实现,再就是菜单选择调用tab的addTab方法
<el-menu @select="addTab" mode="vertical" unique-opened :default-active="$route.path" :collapse="isCollapse"background-color="#304156" text-color="#fff" active-text-color="#409EFF"><sidebar-item :routes="routes"></sidebar-item>
</el-menu>addTab(e) {this.$refs.tabBar.addTab(e);
}
  1. 上面代码会看着有点奇怪,因为SideBar,也就是上述的el-menu所在组件和tab是平级的,如下
<template><div class="app-wrapper" :class="{hideSidebar:!sidebar.opened}"><sidebar ref="sidebar" @addTab="addTab" class="sidebar-container"></sidebar><div class="main-container"><navbar></navbar><tab-bar ref="tabBar"></tab-bar><app-main></app-main></div></div>
</template>

siderBartab-bar在同一个组件内,所以要实现参数传递,需要先emit提交事件,再在父组件传递给另一个子组件,这样链路就完整了,没看懂我的看下面的参考吧,我也是参考它的结合自己的代码实现

1.3. 参考

  1. 参考自该问答陶通的回答

转载于:https://www.cnblogs.com/sky-chen/p/10975234.html

Elementui tabs组件内添加组件相关推荐

  1. 在 Element-UI 的 Table 组件上添加列拖拽效果

    在 Element-UI 的 Table 组件上添加列拖拽效果 一.数据驱动 传统的拖动效果,都是基于通过 mousedown.mousemove.mouseup 事件来修改删减 dom 节点 但 V ...

  2. form-create教程:给内置组件和自定义组件添加事件

    本文将介绍form-create如何给内置组件和自定义组件添加事件 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue ...

  3. 无界微前端(wujie):element-ui 弹框内使用select组件,弹出框位置异常解决方案

    element-ui 弹框内使用select组件,弹出框位置异常解决方案 只需三步,第一步: 将子应用将 body 设置为 position: relative  第二步: 在子应用的html上设置个 ...

  4. VUE element-ui之百度OCR证件识别,组件内证件照转码解码识别身份证照文字

    步骤: 接上一篇博文继续完善获取access_token 封装Base64照片转码方法: const identification = {// 将图片转为base64格式transformBase64 ...

  5. VUE内置组件 vue使用插槽分发内容 组件缓存 实现动画的过渡效果

    动态组件 除了允许用户自定义组件之外,Vue还内置了一些组件,以帮助用户高效地开发一些功能.本章将带领大家一起来了解这些内置组件. 某些时候需要动态切换页面部分区域的视图,这个时候内置组件compon ...

  6. vue中怎么清空tab选项卡的缓存_vuejs 内置组件component实现tab切换懒加载和表单输入框内容的清空...

    最近项目中使用了vue2.0 官网脚手架进行了开发.开发中的踩一些坑一直没有来得及整理.本篇文章就vuejs内置组件component的一些使用进行一些总结. 1.使用component 实现tab切 ...

  7. 一个基于vue和element-ui的树形穿梭框组件

    el-tree-transfer 简介 因为公司业务使用vue框架,ui库使用的element-ui.在市面上找到一个好用的vue树形穿梭框组件都很难,又不想仅仅因为一个穿梭框在element-ui之 ...

  8. vue3 内置组件keep-alive用法的全面介绍

    vue3 内置组件keep-alive用法的全面介绍 基础用法 首先看一个反面例子 const app = Vue.createApp({template: `<button v-for=&qu ...

  9. 【Vue-仿照element-ui自己动手封装ui组件】—— alert、confirm 弹窗

    概述 很久之前就一直想要自己搭建一个个人博客,但下班回家的我只想做条咸鱼,这两天周末闲着没事干有想起了这件事,但从何下手?看了一下主流的几个ui框架挺好看的但大家都在用没有新鲜感,于是决定自己试着做一 ...

  10. react 动态添加组件属性_这么高质量React面试题(含答案),看到就是赚到了!...

    前言 本文篇幅较长,全是干货,建议亲们可以先收藏慢慢看哦 写文不易,欢迎大家一起交流,喜欢文章记得关注我点个赞哟,感谢支持! Q1 :什么是虚拟DOM? 难度::star: 虚拟DOM(VDOM)它是 ...

最新文章

  1. Linux下编译build的命令,Linux命令行下编译Android NDK的示例代码
  2. HTML DOM那点儿事儿
  3. 具有CDI和lambda的策略模式
  4. rsync配置和使用
  5. Qt文档阅读笔记-Timer QML Type 官方解析与实例
  6. Spring Boot 问题记录
  7. setValuesForKeysWithDictionary:的用途
  8. ios app 提交评审注意事项
  9. C语言实例:三个数从小到大排序
  10. 路由器的工作原理定义
  11. linux添加jetdirect协议,如何设置 HP JetDirect 设备的网络安全性?
  12. 轻量android模拟器,夜神安卓模拟器6.2.0.0版:开启专业“特需”服务
  13. POI实现Excel文件加密
  14. JAVA使用wkhtmltopdf 将Html 导出PDF
  15. js 金额千分位转换
  16. 51单片机 AT24C04+蜂鸣器+Proteus仿真
  17. 求以log2为底的对数值
  18. 关于.net framework4.0安装失败,“安装时发生严重错误”
  19. 100阶乘的约数个数
  20. 远征日服·信喵之野望 按键精灵脚本4.截卡

热门文章

  1. cocos2dx学习:TexturePacker的使用
  2. 一次FCK拿bc全过程
  3. .NET中的数据结构——表
  4. Yahoo Web UIs——Java开发者丰富的Web UI
  5. php-5.6.26源代码 - hash存储结构 - hash算法
  6. OAUI前台设计(二)
  7. gecode int branch
  8. Javascript:拦截所有AJAX调用,重点处理服务器异常
  9. ZOJ - 4114 Flipping Game
  10. jquery做一个表单验证