vue+element实现多标签页导航

项目需求:实现左侧菜单栏,右边内容区的顶部有个导航栏,每打开一个页面,右边导航栏就多一个标签,打开的页面缓存下来,可以实现多页面切换。

有两种思路:

1.element-ui的el-tab标签页实现。

2.网上看的有个比较复杂的做法,我没采用,但是我把具体代码写了出来,可供参考。

 

我用的是第一种方法,具体这周末补齐。

这两种做法都会出现一个问题:element弹窗背景遮罩的问题,周末一并解决

<el-tabs v-model="pageCurrent" type="card" closable @tab-click='tabChange' @tab-remove="removeTab">
	<el-tab-pane v-for="(item) in pageList"
		:key="item.name"
		:name="item.name">
		<span slot="label">
			<span>{{item.label}}</span>
			<span class="refresh">
				<i style="font-size:15px;" @click="refreshModule" class="el-icon-refresh" ></i> 
			</span>
		</span>
	</el-tab-pane> 
</el-tabs>



<keep-alive :exclude="exclude">
    <router-view v-if="condition" ref="view" />
</keep-alive>
data() {
	return {
		pageCurrent:'',
		pageList:[],
		exclude:null,
		condition:true,
	}
},

watch: {
	$route: {
		handler(to,form=null){
			//当路由改变时,检测该路由是否已经在打开的页面之中,如果不在,就添加进去
			this.pageCurrent = to.path;
		},
		immediate: true
	}
},

methods: {
	removeTab(targetName){
		let tabs = this.pageList;
		let activeName = this.pageCurrent;
		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.pageCurrent = activeName;
		this.pageList = tabs.filter(tab => tab.name !== targetName);
		this.$router.push({path:activeName})
	},
	tabChange(tab,event){
		this.$router.push({path:tab.name})
	},
	refreshModule(){
		this.exclude = this.$refs.view.$options.name;
		this.condition = !this.condition
		this.$nextTick(_ => {
			this.exclude = null
			this.condition = !this.condition
		})
	},
	
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值