使用<el-upload>组件时上传图片成功后不回显如何解决

文章讲述了在使用ElementUI的el-upload组件时,图片无法实时回显的问题,通过在按钮上直接绑定图片链接并利用Vue.js的$set方法更新动态属性解决了这个问题。展示了修复后的效果和代码实现。

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

文章大纲:

1.问题描述

2.解决方式

3.问题解决后效果展示

1.问题描述:


使用el-upload>组件时图片无法回显, 只能展示一个是否完成的图标, 这个对用户体验不是很友好, 无法直观的看到自己上传的图片.


2.解决方式:

1.直接在按钮上添加<el-image通过上传成功后拿到图片链接然后通过src属性进行引用,如图
<el-image v-if="item.src" :src="item.src" fit="contain" style="max-width: 50%; max-height: 100px;" ></el-image>
<i v-else class="el-icon-upload"></i>
<el-button v-if="!item.src" size="mini" type="primary">点击上传图片</el-button>

2.但是这样使用的话会出现一个问题,el-image组件的src属性是动态绑定的,而item.src的值更新后并没有立即反映到el-image组件上。这个时候我们可以通过Vue.js提供的$set方法来确保更新el-image组件的src属性。在上传成功的函数里进行修改,代码如下所示:
handleUploadSuccess(response, file, fileList, item) {
              // 将返回值绑定到item.src变量 原代码是: item.src=response.link
              this.$set(item, 'src', response.link); //修改后代码
              // 更新文件列表中对应文件的链接
                  const uploadedFile = fileList.find(f => f.uid === file.uid);
                  if (uploadedFile) {
                    uploadedFile.url = response.link;
                  }
              this.$message({
                showClose: true,
                message: '上传成功',
                type: 'success'
              })
            },

3.问题解决后效果展示:

这段代码使用Element UI 的 el-upload 组件来实现上传功能并回显图片。其中,action 属性指定了上传文件的地址,:show-file-list="false" 表示显示上传文件列表,:on-success="handleAvatarSuccess" 表示上传成功后的回调函数,:before-upload="beforeAvatarUpload" 表示上传前的回调函数。 在 data 中定义了 imageUrl 变量来保存上传成功后的图片地址。 handleAvatarSuccess 函数会在上传成功后被调用,将上传成功后的图片地址赋值给 imageUrl 变量,以便在页面上回显图片。 beforeAvatarUpload 函数会在上传之前被调用,用于校验上传文件的类型和大小。 完整的代码如下: ``` <template> <el-upload class="avatar-uploader" action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </template> <script> export default { data() { return { imageUrl: '' }; }, methods: { handleAvatarSuccess(res, file) { this.imageUrl = URL.createObjectURL(file.raw); }, beforeAvatarUpload(file) { const isJPG = file.type === 'image/jpeg'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error('上传头像图片只能是 JPG 格式!'); } if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 2MB!'); } return isJPG && isLt2M; } } }; </script> ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值