element ui 在Dialog对话框中使用 el-upload 上传图片后不回显的问题

博主在el-dialog对话框中使用el-form表单上传图片,上传成功后imgUrl重置却无法回显。猜测是对话框不能根据数据刷新节点,通过在回调方法中关闭再开启对话框解决了回显问题,后续同伴还给出了另一种代码解决方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是在<el-dialog> 对话框中使用表单<el-form>提交数据,在上传图片时,使用<el-upload>标签上传,此时问题来了,我明明在上传成功回调方法中已经将imgUrl重置了啊,但是并没有回显出来。

<!--上传图片-->
<el-upload
            :headers="headers"
            :action="uploadPath"
            :show-file-list="false"
            :on-success="uploadSuccessHandle"
            :before-upload="onBeforeUpload"
            class="avatar-uploader"
            accept=".jpg, .jpeg, .png, .gif"
          >
            <img v-if="dataForm.imgUrl" :src="dataForm.imgUrl" class="avatar" >
            <i v-else class="el-icon-plus avatar-uploader-icon" />
 </el-upload>


//上传图片成功后回调的方法
uploadSuccessHandle(e) {
      this.dataForm.imgUrl = e.url
    }

我思考了会,猜测是在<el-dialog>中,已经弹出显示的对话框不能根据数据刷新节点。于是我抖机灵的在回调方法中,将对话框关掉再开启,就成功将其回显出来了,并且在前端显示时并没有看出它关过。

uploadSuccessHandle(e) {
      this.dataForm.imgUrl = e.url
      this.dialogFormVisible = false
      this.dialogFormVisible = true
    }

2020.4.7编辑:

我同伴告诉我只需要加上下面那串代码就可以了,........;

this.$forceUpdate()

 

### el-upload 文件上传回显重复解决方案 对于el-upload组件在文件上传过程中遇到的回显重复问题,可以采取多种措施来确保每次上传操作独立且会相互影响。具体来说: -el-upload位于`<div>`标签而非表单内部时可能出现图片无法即时回显的情况[^1]。这表明环境差异可能会影响组件行为的一致性。 针对此现象以及更广泛的回显重复难题,建议实施如下策略: #### 清除历史记录以防止残留干扰 每当对话框(`el-dialog`)被关闭前清除其内的el-upload实例所持有的任何先前选定文件列表。这样能有效阻止旧有的文件项干扰新的上传流程,从而减少必要的视觉抖动或重叠显示[^3]。 ```javascript // 假设这是用于控制弹窗可见性的变量名 const dialogVisible = ref(false); // 关闭模态窗口之前的回调函数定义 function handleDialogClose() { // 获取到upload组件实例并调用clearFiles方法清空已选中的文件队列 uploadRef.value.clearFiles(); } // 绑定上述逻辑至dialog组件的相关属性上 <el-dialog :visible.sync="dialogVisible" @close="handleDialogClose"> ... </el-dialog> ``` #### 自定义处理成功响应的数据结构 如果后台服务返回的结果符合前端预期,则可能导致某些UI更新机制失效,比如缺少成功的图标指示等问题。为了应对这种情况,应当调整服务器端API的设计或者是在客户端对接收到的信息做适当转换,使其满足框架的要求[^4]。 ```javascript import { ElMessage } from 'element-plus'; export default defineComponent({ methods: { handleAvatarSuccess(response, file) { const url = response.data || ''; // 根据实际情况解析response获取实际url路径 this.imageUrl = URL.createObjectURL(file.raw); // 或者直接设置为远程链接 ElMessage.success('Upload succeeded'); // 如果存在fileList管理需求的话还需要手动维护这个数组状态 this.fileList.push({name: file.name, url}); }, beforeAvatarUpload(file) { // 可在此处执行预检工作如尺寸验证等 return true; } } }) ``` 通过以上手段能够较好地解决el-upload组件存在的回显异常状况,并提高用户体验质量。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值