From f6d1b848e46cec2093b864554db1af9f36fe7b25 Mon Sep 17 00:00:00 2001 From: tangjinzhou <415800467@qq.com> Date: Mon, 10 Jan 2022 10:23:17 +0800 Subject: [PATCH] fix: modal cannot open in dropdown, close #5139 --- components/vc-dialog/DialogWrap.tsx | 2 ++ components/vc-trigger/context.ts | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/components/vc-dialog/DialogWrap.tsx b/components/vc-dialog/DialogWrap.tsx index 426ded1a00..ee34f0a2b7 100644 --- a/components/vc-dialog/DialogWrap.tsx +++ b/components/vc-dialog/DialogWrap.tsx @@ -3,6 +3,7 @@ import type { IDialogChildProps } from './IDialogPropTypes'; import getDialogPropTypes from './IDialogPropTypes'; import Portal from '../_util/PortalWrapper'; import { defineComponent, ref, watch } from 'vue'; +import { useProvidePortal } from '../vc-trigger/context'; const IDialogPropTypes = getDialogPropTypes(); const DialogWrap = defineComponent({ name: 'DialogWrap', @@ -13,6 +14,7 @@ const DialogWrap = defineComponent({ }, setup(props, { attrs, slots }) { const animatedVisible = ref(props.visible); + useProvidePortal({}, { inTriggerContext: false }); watch( () => props.visible, () => { diff --git a/components/vc-trigger/context.ts b/components/vc-trigger/context.ts index a155ef69d3..69e5c48108 100644 --- a/components/vc-trigger/context.ts +++ b/components/vc-trigger/context.ts @@ -27,11 +27,11 @@ export interface PortalContextProps { inTriggerContext: boolean; // 仅处理 trigger 上下文的 portal } const PortalContextKey: InjectionKey = Symbol('PortalContextKey'); -export const useProvidePortal = (instance: any) => { +export const useProvidePortal = (instance: any, config = { inTriggerContext: true }) => { provide(PortalContextKey, { - inTriggerContext: true, + inTriggerContext: config.inTriggerContext, shouldRender: computed(() => { - const { sPopupVisible, popupRef, forceRender, autoDestroy } = instance; + const { sPopupVisible, popupRef, forceRender, autoDestroy } = instance || {}; // if (popPortal) return true; let shouldRender = false; if (sPopupVisible || popupRef || forceRender) { @@ -46,6 +46,7 @@ export const useProvidePortal = (instance: any) => { }; export const useInjectPortal = () => { + useProvidePortal({}, { inTriggerContext: false }); const portalContext = inject(PortalContextKey, { shouldRender: computed(() => false), inTriggerContext: false,