直接上代碼
模板部分:
<div class="panel">
<el-button type="primary" size="small" @click="addTab">
添加新標簽頁
</el-button>
<el-tabs
style="margin-top:15px;"
v-model="editableTabsValue"
type="card"
@tab-remove="removeTab"
>
<el-tab-pane
v-for="item in editableTabs"
:key="item.name"
:label="item.title"
:name="item.name"
:closable="item.close"
>
<component :is="item.content" :objId="item.name"></component>
</el-tab-pane>
</el-tabs>
</div>
<!-- 添加標簽頁彈層 -->
<el-dialog
title="添加新標簽"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose"
>
<el-input v-model="addTagsValue" placeholder="請填寫標簽名稱"></el-input>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose" size="small">取 消</el-button>
<el-button
type="primary"
size="small"
@click="makeSureAddTags(editableTabsValue)"
>確 定</el-button
>
</span>
</el-dialog>
組件部分:(這里根據自己的需求去加載對應的組件),我的需求就是可以添加多個富文本組件
import MettingAgenda from "./mettingAgenda.vue"; // 會議議程組件,默認第一個 import Rich from "@/views/components/rich"; // 添加新標簽富文本編輯器
data部分:
// 動態標簽頁配置
editableTabsValue: "1",
editableTabs: [
{
title: "會議議程",
name: "1",
content: MettingAgenda,
close: false
},
{
title: "會場介紹",
name: "2",
content: Rich,
close: false
}
],
tabIndex: 2,
dialogVisible: false, //添加新標簽dialog狀態
addTagsValue: "" //添加新標簽綁定值
方法:
addTab() {
this.dialogVisible = true;
},
removeTab(targetName) {
let tabs = this.editableTabs;
let activeName = this.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;
}
}
});
}
this.editableTabsValue = activeName;
this.editableTabs = tabs.filter(tab => tab.name !== targetName);
},
makeSureAddTags(targetName) {
console.log(targetName);
if (this.addTagsValue === "") {
this.$message({
message: "標簽名稱不能為空",
type: "error"
});
return;
}
if (this.addTagsValue.trim().length > 6) {
this.$message({
message: "標簽名稱最多6個字",
type: "error"
});
return;
}
if (this.editableTabs.length > 5) {
this.$message({
message: "標簽最多添加6個",
type: "error"
});
return;
}
let newTabName = ++this.tabIndex + "";
this.editableTabs.push({
title: this.addTagsValue, //標簽名
name: newTabName,
content: Rich, //對應組件名稱
close: true
});
this.editableTabsValue = newTabName;
this.$message({
message: "標簽添加成功",
type: "success"
});
this.handleClose(); // 初始化彈層
},
handleClose() {
this.dialogVisible = false;
this.addTagsValue = "";
},
這樣就OK了
