说明

基于element-plus。

动态页签

步骤1:初始化bindEditors

const editorsInstance = new ThinkEditorInstance('实例1') //instanceId='实例1' 管理多个ThinkEditor对应Tabs多页签
const bindEditors = ref(editorsInstance.editors)

步骤2:使用v-for=”(item, index) in this.bindEditors

<el-tab-pane
    style="width: 100%; height: 900px"
    :label="item.showName"
    :name="item.docName"
    :key="item.docName"
    v-for="item in bindEditors">
    <component :is="ThinkEditorView" :thinkEditor="item" />
    </el-tab-pane>

步骤3:监听ThinkEditorInstance的instanceChange事件

editorsInstance.addEventListener(E_EVENT_KEY.instanceChange, OnInstanceChange)

步骤4:触发element-plus tabs组件及时重绘

const OnInstanceChange = (evt: Event) => {
  //触发vue3 element-plus tabs组件及时重绘
  triggerRef(bindEditors)
}

动态页签名

  • 基于动态页签适配的基础上,做如下修改

监听ThinkEditorInstance转发ThinkEditor的docModified事件,或直接监听ThinkEditor的docModified事件

  editorsInstance.addEventListener(E_EVENT_KEY.docModified, OnDocModified);
或
  thinkEditor.addEventListener(E_EVENT_KEY.docModified, this.OnDocModified);

`

OnDocModified中修改tab页签名

  • 重点:需额外触发UI动态更新
const OnDocModified = (evt: Event) => {
  let e = evt as ThinkEditorEvent
  let thinkEditor = e.data.editor!
  thinkEditor.showName = thinkEditor.docName + '*'
  editorsInstance.CreateInstanceChangeEvent() //or this.OnInstanceChange();
}
文档更新时间: 2024-07-30 17:37   作者:admin