elementui之el-tabs,自定义tab,可增加、移除tab页

本文档展示了如何使用Vue.js的el-tabs组件实现动态添加和删除tab页的功能,包括在删除操作中防止删除最后一个tab页。在data中定义了初始tab页,并在beforeLeave事件中阻止了删除最后一个tab页的操作。同时,提供了addTab方法用于增加新的tab页,removeTab方法用于删除指定的tab页,确保了界面交互的正确性。
摘要由CSDN通过智能技术生成

效果图如下,主要实现tab页的新增、删除功能,点击删除按钮时若删除对象为最后一个tab页则取消之。在这里插入图片描述
根据官网的文档,可以使用组件中的事件来实现这一功能,但是增加的按钮位置不是我们想要的,删除时也无法保留最后一个tab页,这些需要我们自己改写一下。
在这里插入图片描述在这里插入图片描述
代码实现:

 <el-tabs v-model="editableTabsValue" type="card"  @tab-click="clickTab" @tab-remove="removeTab" :before-leave="beforeLeave"
                     class="my-tab-pane">
                <el-tab-pane v-for="(item, idx) in editableTabs"
                             :key="item.name"
                             :label="item.title"
                             :name="item.name">
                              </el-tab-pane>
                <el-tab-pane key="add" name="add"> //这是增加的按钮
					<span slot="label" style="padding: 8px;font-size:20px;font-weight:bold;">+</span>
                </el-tab-pane>
            </el-tabs>
/*在data中定义*/
 data() {
            return {
            	editableTabsValue: '1',
            	currentIndex:1,
                addIndex:1,
                tabIndex: 1, 
                editableTabs: [{
                    title: 'tab1',
                    name: '1',
                    }]
            }
        }

/* 函数定义 */
/* 活动标签切换时触发 */
            beforeLeave(currentName,oldName) { //通过tab标签的切换事件触发增加的函数
                console.log(currentName)
                //如果name是add,则调用增加tab的函数
                if(currentName=="add"){
                    this.addTab()
                    return false
                }else{
                    this.currentIndex=currentName;
                }
                console.log(this.currentIndex)
            },
             addTab() {
                let newTabIndex = ++this.tabIndex + '';
                this.editableTabs.push({
                    title: 'tab'+ ++this.addIndex,
                    name: newTabIndex
                });
                this.editableTabsValue = newTabIndex;
                this.currentIndex=newTabIndex;
            },
            removeTab(targetName) {
                if(this.editableTabs.length <= 1){
                    return false;
                }
                var self=this;
                let tabs = self.editableTabs;
                let activeName = self.editableTabsValue;
                if (activeName === targetName) {
                    tabs.forEach((tab, index) => {
                        if (tab.name === targetName) {
                            let nextTab = tabs[index + 1] || tabs[index - 1];
                            if (nextTab) {
                                activeName = nextTab.name;
                            }
                        }
                    });
                }
                self.editableTabsValue = activeName;
                self.editableTabs = tabs.filter(tab => tab.name !== targetName);
                self.editableTabs.map((tab,index)=>{
                    tab.title="tab"+(index+1);
                    self.addIndex=(index+1);
                })
                self.currentIndex = self.editableTabsValue;
                self.editableTabs.map((tab,index)=>{
                    console.log(tab,index,self.currentIndex)
                    if(self.currentIndex === tab.name){
                        self.currentFlag = index;
                    }
                })
                self.$message({
                    type: 'success',
                    message: '删除成功!'
                });
            },
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值