element-ui tabs点击一个子组件中的按钮或图标,切换到另一个tabs组件中

我在项目中,遇到一个tabs下放了两个组件,组件1是拓扑图,组件2是详情,我要点击组件1中拓扑图的节点跳转到组件2的详情中,于是就有了如下图所示的需求:

 简单的实现思路就是,点击按钮的时候,子组件向父组件传递tabs想要跳转页面的name,即可实现效果,项目具体实现结构如下图所示:

注:主要实现是红色标记的部分

简单代码如下:

父组件:

<template>
  <div class="app-container">
    <el-tabs ref="tabs" v-model="activeName" type="card" @tab-click="tabClick">
      <el-tab-pane label="拓扑图" name="topo" >
        <server-topo ref="topoCanvas" :data-topo="dataTopo" :links="links" @updateActiveName="updateActiveName"></server-topo>
      </el-tab-pane>
      <el-tab-pane label="详细信息" name="serverInfo">
        <server-detail ref="ServerDetail" :server-info-list="serverInfoList"/>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>
<script type="text/jsx">
import ServerDetail from '@/views/system/deviceManage/serverInfo/serverDetail'
import ServerTopo from '@/views/system/deviceManage/serverInfo/serverTopo'


export default {
  name: 'ServerInfo',
  components: { ServerDetail, ServerTopo },
  props: {
  },
  data() {
    return {
      activeName: 'topo',
      serverInfoList: [],
      dataTopo: [],
      links: [],
      number: undefined
    }
  },
  created() {
    this.sendToServerList()
  },
  methods: {
    updateActiveName(data) {
      // 修改activeName的名称
      this.activeName = data
    },
    tabClick(pane, event) {

    }
  }
}
</script>


<style scoped>


</style>

 要实现点击效果的子组件:

// 双击节点时,跳转到服务器详细信息中
echarts.init(chart).on('dblclick', function(params) {
  if (params.dataType == 'node') {
    // 子组件向父组件传值,修改tabs的activeName,从而达到组件切换的效果
    that.$emit('updateActiveName', 'serverInfo')
  }
});

Vue 中结合 Element-UI 的 `el-tabs` 组件实现标签栏自动吸附到顶部的效果,通常需要使用 Vue 的 `v-if` 者 `v-show` 指令以及 CSS 来动态控制元素位置。这里有一个简单的步骤描述: 1. 首先,在 HTML 结构上,给每个 tab 容器添加一个容器,并设置样式,比如一个固定高度的 `.tab-container`: ```html <template> <div class="tab-container"> <el-tabs v-model="activeName" @tab-click="handleTabClick"> <!-- tabs 元素 --> </el-tabs> </div> </template> ``` 2. 使用 `v-if` `v-show` 来控制标签容器是否显示在顶部。当 tab 数量超过某个阈值者滚动条到达顶部时,将 `.tab-container` 设置为可见: ```javascript <script> export default { data() { return { activeName: '', showTopBar: false, // 添加一个用于判断是否显示顶部标签栏的计数器者滚动事件处理函数 tabCount: 0, }; }, methods: { handleTabClick(tab) { this.activeName = tab.name; // 当满足条件时更新 showTopBar 的状态 if (/* 满足显示顶部条件 */) { this.showTopBar = true; } }, }, computed: { isTopVisible() { return this.showTopBar && /* 判断是否达到顶部 */ }, }, mounted() { window.addEventListener('scroll', this.handleScroll); }, beforeDestroy() { window.removeEventListener('scroll', this.handleScroll); }, // 在 scroll 事件处理器中检查是否到达顶部并调整 showTopBar 的值 handleScroll() { if (window.scrollY === 0) { this.showTopBar = true; // 当滚动到底部时,显示顶部栏 } else { this.showTopBar = false; } }, }; </script> ``` 3. 最后,使用 CSS 样式调整 `.tab-container` 的位置,使其在 `.showTopBar` 为真时显示在顶部: ```css .tab-container { position: fixed; top: 0; /* 其他定位和样式属性 */ } .tab-container[hidden] { display: none; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值