diff --git a/src/tabs/tab-panel.tsx b/src/tabs/tab-panel.tsx index 0885ac1f1..939fb43b6 100644 --- a/src/tabs/tab-panel.tsx +++ b/src/tabs/tab-panel.tsx @@ -15,6 +15,10 @@ export default Vue.extend({ }, }, + updated() { + (this.$parent as any)?.updatePanels?.({ force: true }); + }, + render() { const { destroyOnHide, active } = this; if (destroyOnHide && !active) return null; diff --git a/src/tabs/tabs.tsx b/src/tabs/tabs.tsx index 9e91adf93..a1c6d1a4a 100644 --- a/src/tabs/tabs.tsx +++ b/src/tabs/tabs.tsx @@ -53,7 +53,7 @@ export default (Vue as VueConstructor).extend({ }, methods: { - updatePanels() { + updatePanels({ force = false } = {}) { if (!this.listPanels) { this.panels = this.panels || []; return; @@ -63,7 +63,7 @@ export default (Vue as VueConstructor).extend({ .filter(Boolean) .filter((child) => kebabCase(child?.$vnode?.tag).endsWith(`${prefix}-tab-panel`)); const isUnchange = () => newPanels.length === this.panels.length && this.panels.every((panel, index) => panel === newPanels[index]); - if (isUnchange()) return; + if (isUnchange() && !force) return; this.panels = newPanels; }, onAddTab(e: MouseEvent) {