@@ -12,13 +12,16 @@ import {
1212 defineComponent ,
1313 h ,
1414 inject ,
15+ onBeforeUnmount ,
1516 ref ,
1617 Transition ,
18+ watch ,
1719 withDirectives
1820} from 'vue'
21+ import { resizeObserverManager } from 'vueuc'
1922import { NBaseMenuMask } from '../../_internal'
2023import FocusDetector from '../../_internal/focus-detector'
21- import { resolveSlot , resolveWrappedSlot , useOnResize } from '../../_utils'
24+ import { resolveSlot , resolveWrappedSlot } from '../../_utils'
2225import { NEmpty } from '../../empty'
2326import NCascaderSubmenu from './CascaderSubmenu'
2427import { cascaderInjectionKey } from './interface'
@@ -74,7 +77,22 @@ export default defineComponent({
7477 function handleResize ( ) : void {
7578 syncCascaderMenuPosition ( )
7679 }
77- useOnResize ( selfElRef , handleResize )
80+ // Watch selfElRef to re-register resize handler when DOM is recreated
81+ // This is needed because the menu DOM is destroyed when show=false
82+ watch ( selfElRef , ( el , oldEl ) => {
83+ if ( oldEl ) {
84+ resizeObserverManager . unregisterHandler ( oldEl )
85+ }
86+ if ( el ) {
87+ resizeObserverManager . registerHandler ( el , handleResize )
88+ }
89+ } )
90+ onBeforeUnmount ( ( ) => {
91+ const { value : el } = selfElRef
92+ if ( el ) {
93+ resizeObserverManager . unregisterHandler ( el )
94+ }
95+ } )
7896 function showErrorMessage ( label : string ) : void {
7997 const {
8098 value : { loadingRequiredMessage }
0 commit comments