From 08533c772d9b36944dce4f752f0b61ac6507285d Mon Sep 17 00:00:00 2001 From: tanjinzhou <415800467@qq.com> Date: Fri, 21 May 2021 17:04:48 +0800 Subject: [PATCH] refactor: menu --- components/menu/src/Menu.tsx | 1 + components/menu/src/PopupTrigger.tsx | 5 ++++- components/menu/src/SubMenu.tsx | 8 ++++---- components/menu/src/hooks/useMenuContext.ts | 4 +++- v2-doc | 2 +- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/components/menu/src/Menu.tsx b/components/menu/src/Menu.tsx index 1b54e763b..b8f5fdffc 100644 --- a/components/menu/src/Menu.tsx +++ b/components/menu/src/Menu.tsx @@ -320,6 +320,7 @@ export default defineComponent({ registerMenuInfo, unRegisterMenuInfo, selectedSubMenuEventKeys, + isRootMenu: true, }); return () => { return ; diff --git a/components/menu/src/PopupTrigger.tsx b/components/menu/src/PopupTrigger.tsx index 7298952a8..d1f326671 100644 --- a/components/menu/src/PopupTrigger.tsx +++ b/components/menu/src/PopupTrigger.tsx @@ -36,6 +36,7 @@ export default defineComponent({ subMenuCloseDelay, builtinPlacements, triggerSubMenuAction, + isRootMenu, } = useInjectMenu(); const placement = computed(() => @@ -77,7 +78,9 @@ export default defineComponent({ popupClassName, )} stretch={mode === 'horizontal' ? 'minWidth' : null} - getPopupContainer={getPopupContainer.value} + getPopupContainer={ + isRootMenu ? getPopupContainer.value : triggerNode => triggerNode.parentNode + } builtinPlacements={placement.value} popupPlacement={popupPlacement.value} popupVisible={innerVisible.value} diff --git a/components/menu/src/SubMenu.tsx b/components/menu/src/SubMenu.tsx index ac523bfe1..9be235df6 100644 --- a/components/menu/src/SubMenu.tsx +++ b/components/menu/src/SubMenu.tsx @@ -31,7 +31,7 @@ export default defineComponent({ internalPopupClose: Boolean, }, slots: ['icon', 'title'], - emits: ['titleClick', 'titleMouseenter', 'titleMouseleave'], + emits: ['titleClick', 'mouseenter', 'mouseleave'], inheritAttrs: false, setup(props, { slots, attrs, emit }) { useProvideFirstLevel(false); @@ -130,13 +130,13 @@ export default defineComponent({ const onMouseEnter = (event: MouseEvent) => { if (!mergedDisabled.value) { changeActiveKeys(keysPath.value); - emit('titleMouseenter', event); + emit('mouseenter', event); } }; const onMouseLeave = (event: MouseEvent) => { if (!mergedDisabled.value) { changeActiveKeys([]); - emit('titleMouseleave', event); + emit('mouseleave', event); } }; @@ -245,7 +245,7 @@ export default defineComponent({ onVisibleChange={onPopupVisibleChange} v-slots={{ popup: ({ visible }) => ( - + {slots.default?.()} diff --git a/components/menu/src/hooks/useMenuContext.ts b/components/menu/src/hooks/useMenuContext.ts index 98eca9179..7ee25502c 100644 --- a/components/menu/src/hooks/useMenuContext.ts +++ b/components/menu/src/hooks/useMenuContext.ts @@ -26,6 +26,8 @@ export interface StoreMenuInfo { isLeaf?: boolean; } export interface MenuContextProps { + isRootMenu: boolean; + store: UnwrapRef>; registerMenuInfo: (key: string, info: StoreMenuInfo) => void; unRegisterMenuInfo: (key: string) => void; @@ -116,7 +118,7 @@ const MenuContextProvider = defineComponent({ props: Object, }, setup(props, { slots }) { - useProvideMenu({ ...useInjectMenu(), ...props }); + useProvideMenu({ ...useInjectMenu(), ...props.props }); return () => slots.default?.(); }, }); diff --git a/v2-doc b/v2-doc index d19705328..a7013ae87 160000 --- a/v2-doc +++ b/v2-doc @@ -1 +1 @@ -Subproject commit d197053285b81e77718621c0b5b94cb3b21831a2 +Subproject commit a7013ae87f69dcbcf547f4b023255b8a7a775557