uni-app web vue3 调用了 previewImage api 关闭预览后用来挂载图片预览的div并没有移除
uni-app web vue3 调用了 previewImage api 关闭预览后用来挂载图片预览的div并没有移除
示例代码:
<template>
<view @click="handleClick">预览图片</view>
</template>
<script>
export default {
methods: {
handleClick() {
uni.previewImage({
urls: ['https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app.png'],
})
}
}
}
</script>
操作步骤:
如上代码
预期结果:
移除多余dom
实际结果:
没有移除
bug描述:
web vue3 调用了 previewImage api,关闭预览后用来挂载图片预览的div并没有移除。
信息类别 | 详细信息 |
---|---|
产品分类 | uniapp/H5 |
PC开发环境操作系统 | Mac |
PC开发环境操作系统版本号 | 11 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.66 |
浏览器平台 | Chrome |
浏览器版本 | 111 |
项目创建方式 | HBuilderX |
更多关于uni-app web vue3 调用了 previewImage api 关闭预览后用来挂载图片预览的div并没有移除的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这里没有主动移除是为了复用,需要移除的理由是什么呢?
更多关于uni-app web vue3 调用了 previewImage api 关闭预览后用来挂载图片预览的div并没有移除的实战教程也可以访问 https://www.itying.com/category-93-b0.html
为什么要这么做呢?很多组件库有类似的行为都是新创建一个DOM,卸载的时候移除DOM。平白无故增加了一个div还是可能对开发者产生影响的,这就是副作用,不应该及时清理吗?
回复 用户2803209: 内部的 modal、toast、loading、previewImage 都没有手动移除复用的dom,讨论下来决定暂不处理,如果你需要筛选dom,可以先考虑过滤此类dom。
这是一个已知的uni-app在H5平台下的DOM残留问题。在Vue3环境下,使用uni.previewImage预览图片后,关闭时确实会出现挂载节点未及时清除的情况。
这个问题主要是由于H5平台的previewImage实现机制导致的。在关闭预览时,相关的DOM节点没有完全从文档中移除,而是保留了容器节点。
目前可以尝试以下临时解决方案:
- 手动清除残留节点:
const handleClick = () => {
uni.previewImage({
urls: ['https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app.png'],
success: () => {
setTimeout(() => {
const previewNodes = document.querySelectorAll('.uni-preview-image');
previewNodes.forEach(node => node.remove());
}, 300);
}
});
}