效果
步骤
1.在Elementui找一个标签页组件
复制粘贴到代码
2.将他写活
将很多页面需要用的方法和变量写入store
editableTabsValue: '2',
editableTabs: [{
title: '首页',
name: 'index',
},],
addTab(state, tab) {
if (state.editableTabs.findIndex(item => item.title === tab.title) === -1) {
state.editableTabs.push({
title: tab.title,
name: tab.name,
});
state.editableTabsValue = tab.name;
}
},
3.点击事件
点击事件调用这个方法
selectMenu(menu) {
this.$store.commit("addTab", menu);
},
4.优化
优化点1:解决可以重复出现标签的问题
加一个判断
if (state.editableTabs.findIndex(item => item.title === tab.title) === -1) {
state.editableTabs.push({
title: tab.title,
name: tab.name,
});
state.editableTabsValue = tab.name;
}
},
优化点2:首页不是子路由,所以要专门写一个
<!-- 首页菜单项 -->
<el-menu-item index="/sys/Index" @click="selectMenu({name:'Index',title:'首页'})">
<template #title>
<i class="el-icon-s-home"></i>
首页
</template>
</el-menu-item>
优化点3:点击之后他不会进行一个页面的跳转
写一个点击事件
selectMenu(menu) {
this.$store.commit("addTab", menu);
},
注意的点
因为我们需要再页面渲染完毕之前,将 editableTabsValue和editableTabs进行计算,所以需要写到computed里面,还有如果有get方法,就必须有set方法,否则无法进行删除
computed: {
editableTabs: {
get() {
return this.$store.state.menu.editableTabs;
},
set(val) {
this.$store.state.menu.editableTabs = val
}
},
editableTabsValue: {
get() {
return this.$store.state.menu.editableTabsValue;
},
set(val) {
this.$store.state.menu.editableTabsValue = val
}
},
},