Element UI tabs标签页 将点击选择改成鼠标指到就点击(类似hover)
1、单个组件
在el-tabs里添加个ref,删去el-tab-pane里的 :name绑定,然后在mounted里添加代码
mounted() {
this.$nextTick(() => {
this.$refs.你在el-tabs定义的ref名称.$refs.nav.$nextTick(() => {
// 此时tab的nav才渲染dom 否则拿不到el-tabs__item
var target = document.getElementsByClassName("el-tabs__item");
let that = this;
for (let i = 0; i < target.length; i++) {
target[i].addEventListener("mouseover", () => {
that.$refs.你在el-tabs定义的ref名称.handleTabClick(1, String(i));
});
}
});
});
},
2、多级组件(直接上代码)
<!-- 顶部菜单tab分类 -->
<el-tabs class="menu-tabs" v-model="tabActiveName" @tab-click="handleClick" ref="navTabs">
<el-tab-pane v-for="(tab, i) in menuData" :key="i" :label="tab.name">
<!-- 左侧菜单二级 -->
<el-tabs class="menu-contain-left" :tab-position="tabPosition" v-model="tabActiveName2" :id="'left-menu-'+i" ref="navTabs1">
<el-tab-pane v-for="(menuSecond, x) in tab.panels" :key="x" :label="menuSecond.name">
</el-tab-pane>
</el-tabs>
</el-tab-pane>
</el-tabs>
//自动点击
this.$nextTick(() => {
this.$refs.navTabs.$refs.nav.$nextTick(() => {
// 此时tab的nav才渲染dom 否则拿不到el-tabs__item
let target = document.getElementsByClassName("el-tabs__item is-top");
let that = this;
for (let i = 0; i < target.length; i++) {
target[i].addEventListener("mouseover", () => {
//切换左侧默认选项为第一个
that.tabActiveName2 = "0";
that.$refs.navTabs.handleTabClick(1, String(i));
// console.log(that.$refs.navTabs1[i].$refs.nav)
that.$refs.navTabs1[i].$refs.nav.$nextTick(() => {
// 此时tab的nav才渲染dom 否则拿不到el-tabs__item
let target1 = document.getElementById('left-menu-'+i).getElementsByClassName("el-tabs__item is-left");
let that = this;
for (let j = 0; j < target1.length; j++) {
target1[j].addEventListener("mouseover", () => {
that.$refs.navTabs1[i].handleTabClick(1, String(j));
});
}
});
});
}
});
因为el-tab-pane的:name删去了,所以v-model绑定的不再是字段的值,而是字段在组件里的位置,0就是第一个,1就是第二个等等。
而我的组件逻辑是上方菜单扫过后左侧菜单也相应切换,左侧菜单扫过后切换成里面内容,跟腾讯云的菜单类似,不明白的可以看看腾讯云的菜单。
然后是js代码里的因为我的组件是v-for循环出来的,所以二级菜单的ref就有很多个一样的,所以得加个id区分下。