From 9eddd9d85b92b90d196baa8a3acc815a106fb096 Mon Sep 17 00:00:00 2001 From: qiang Date: Wed, 11 May 2022 11:51:42 +0800 Subject: [PATCH] fix: merge network request for image --- .../uni-components/src/vue/image/index.tsx | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/uni-components/src/vue/image/index.tsx b/packages/uni-components/src/vue/image/index.tsx index 45f94a76b..5e1093f1f 100644 --- a/packages/uni-components/src/vue/image/index.tsx +++ b/packages/uni-components/src/vue/image/index.tsx @@ -69,25 +69,12 @@ export default /*#__PURE__*/ defineBuiltInComponent({ const state = useImageState(rootRef, props) const trigger = useCustomEvent(rootRef, emit) const { fixSize } = useImageSize(rootRef, props, state) - useImageLoader(state, fixSize, trigger) + useImageLoader(state, props, rootRef, fixSize, trigger) return () => { - const { mode } = props - const { imgSrc, modeStyle, src } = state - let imgTsx - if (__NODE_JS__) { - imgTsx = - } else { - imgTsx = imgSrc ? ( - - ) : ( - - ) - } return ( -
- {imgTsx} - {FIX_MODES[mode as keyof typeof FIX_MODES] ? ( +
+ {FIX_MODES[props.mode as keyof typeof FIX_MODES] ? ( // @ts-ignore ) : ( @@ -136,10 +123,13 @@ function useImageState(rootRef: Ref, props: ImageProps) { function useImageLoader( state: ImageState, + props: ImageProps, + rootRef: Ref, fixSize: FixSize, trigger: CustomEventTrigger ) { let img: HTMLImageElement | null + let draggableImg: HTMLImageElement | null const setState = (width = 0, height = 0, imgSrc = '') => { state.origWidth = width state.origHeight = height @@ -158,6 +148,14 @@ function useImageLoader( const { width, height } = img! setState(width, height, src) fixSize() + + img!.draggable = props.draggable + if (draggableImg) { + draggableImg.remove() + } + draggableImg = img + rootRef.value!.appendChild(img!) + resetImage() trigger('load', evt, { width, @@ -184,6 +182,15 @@ function useImageLoader( () => state.src, (value) => loadImage(value) ) + watch( + () => state.imgSrc, + (value) => { + if (!value && draggableImg) { + draggableImg.remove() + draggableImg = null + } + } + ) onMounted(() => loadImage(state.src)) onBeforeUnmount(() => resetImage()) } -- GitLab