diff --git a/src/menu/submenu.tsx b/src/menu/submenu.tsx index 3a02b2741..881501ec4 100644 --- a/src/menu/submenu.tsx +++ b/src/menu/submenu.tsx @@ -270,6 +270,7 @@ export default defineComponent({ ); const realPopup = ( , + }, expandAnimation: { type: Boolean, }, @@ -193,7 +200,13 @@ export default mixins(classPrefixMixins, getAttachConfigMixins('popup')).extend( methods: { updatePopper() { const { $el: triggerEl } = this; - const popperEl = this.$refs.popper as HTMLElement; + // 支持传入字符串 ref 名称或 HTMLElement + let popperEl: HTMLElement; + if (typeof this.popperContentElement === 'string') { + popperEl = this.$refs[this.popperContentElement] as HTMLElement; + } else { + popperEl = this.popperContentElement || (this.$refs.popper as HTMLElement); + } if (!popperEl || !this.visible) return; if (this.popper) { @@ -363,8 +376,9 @@ export default mixins(classPrefixMixins, getAttachConfigMixins('popup')).extend( } }, onAfterEnter() { - if (this.visible) { - this.updatePopper(); + if (this.visible && this.popper) { + // 动画完成后,元素已有正确尺寸,使用 forceUpdate 强制重新运行所有 modifiers + this.popper.forceUpdate(); } }, onLeave() {