el-upload手动上传图片,上传后隐藏上传样式(el-upload上传单张图片,vue2)

61 篇文章 1 订阅
7 篇文章 0 订阅

简介:上期介绍了使用el-upload上传文件,这次来介绍一下如何使用el-upload上传图片,只能上传一次,上传图片后隐藏上传按钮部分。

实现效果图:

1、首先,想要在项目中使用el-upload组件,同样,得保证项目中已经安装且引入了该组件,具体安装及引入可见上篇文章。

el-upload下载使用icon-default.png?t=N7T8https://blog.csdn.net/weixin_65793170/article/details/132627341?spm=1001.2014.3001.5501

2、然后直接在vue组件中使用。


<el-upload 
    class="upload_box" 
    ref="upload" 
    :limit="limitNum" 
    :class="{ uploadHide: hideUploadEdit }"                
    :on-change="handleEditChange" 
    :http-request="ImgUploadSectionFile"
    :before-upload="beforeAvatarUpload" 
    :with-credentials="true" 
    :auto-upload="true"
    accept=".png, .jpg" 
    list-type="picture-card" 
    :file-list="fileList"
    action=""
    >
        <!-- 加号标识 -->
        <i slot="default" class="el-icon-plus"></i>
        <!-- 上传后显示 -->
        <div slot="file" slot-scope="{file}">
            <img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
            <span class="el-upload-list__item-actions">
                <!-- 图片放大 -->
                <span class="el-upload-list__item-preview"                                     
                      @click="handlePictureCardPreview(file)">
                 <i class="el-icon-zoom-in"></i>
                </span>
                <!-- 图片放大 -->
                <span v-if="!disabled" 
                      class="el-upload-list__item-delete"
                      @click="handleRemove(file)">
                 <i class="el-icon-delete"></i>
                </span>
            </span>
        </div>
</el-upload>

当然,上传处也可以换成按钮或者其它,像这样,

上传处替换成按钮,代码多去少补,

<el-upload 
    class="upload_box" 
    ref="upload" 
    :limit="limitNum" 
    :class="{ uploadHide: hideUploadEdit }"                
    :on-change="handleEditChange" 
    :http-request="ImgUploadSectionFile"
    :before-upload="beforeAvatarUpload" 
    :with-credentials="true" 
    :auto-upload="true"
    accept=".png, .jpg" 
    :file-list="fileList"
    action=""
    >
        <!-- 上传按钮 -->
        <el-button 
            class="upload_btn" 
            slot="trigger" 
            size="small" 
            type="primary">
            上传图片
            <i class="el-icon-upload el-icon--right"></i>
        </el-button>
        <!-- 上传后显示 -->
        <div slot="file" slot-scope="{file}">
            <img class="el-upload-list__item-thumbnail" :src="file.url" alt="">
            <span class="el-upload-list__item-actions">
                <!-- 图片放大 -->
                <span class="el-upload-list__item-preview"                                     
                      @click="handlePictureCardPreview(file)">
                 <i class="el-icon-zoom-in"></i>
                </span>
                <!-- 图片放大 -->
                <span v-if="!disabled" 
                      class="el-upload-list__item-delete"
                      @click="handleRemove(file)">
                 <i class="el-icon-delete"></i>
                </span>
            </span>
        </div>
</el-upload>

因为这里是本地图片测试上传,所以组件中的action属性为空,上传到接口,还需另行配置。

3、相关必要样式和属性介绍。

// 隐藏上传按钮
::v-deep .uploadBox_hide .el-upload--picture-card {
    display: none;
}
// 搭配动态 :class 使用
:class="{ uploadBox_hide: hideUploadEdit }" 


这个样式用于,去掉添加/删除文件时的过渡动画
// ::v-deep .el-upload-list__item {
//     transition: none !important;
// }


      :limit="limitNum" //最大允许上传个数
      :class="{hide:hideUploadEdit}" //加类名为了隐藏上传样式
      :on-remove="handleRemove" //文件列表移除文件时的钩子
      :on-change="handleEditChange" //文件状态改变时的钩子(可以限制文件数量和文件大小)
      :http-request="ImgUploadSectionFile" //覆盖默认的上传行为,实现手动上传
      :before-upload="beforeAvatarUpload" //上传文件之前的钩子
      :with-credentials="true" //支持发送 cookie 凭证信息
      :auto-upload="true" //是否在选取文件后立即进行上传(不知什么原因false没效果)
      accept=".png, .jpg" //接受上传的文件类型
      action="" //手动上传不需要填写url
      list-type="picture-card" //设置文件列表的样式
      :file-list="fileList" //上传的文件列表

4、上传相关事件。

       // 放大图片
        handlePictureCardPreview(file) {
            this.dialogImageUrl = file.url;
            this.dialogVisible = true;
        },
        // 删除图片
        handleRemove(file, fileList) {
            if (this.fileList.length === 0) {
                this.fileList = [];
            } else {
                let dl = this.fileList.indexOf(file);
                this.fileList.splice(dl, 1);
            }
            this.hideUploadEdit = this.fileList.length >= this.limitNum;
        },

        // on-change添加文件,上传成功和上传失败时都会被调用
        handleEditChange(file, fileList) {
            this.hideUploadEdit = fileList.length >= this.limitNum;
            // console.log("this.fileList:", this.fileList);
            // console.log("this.hideUploadEdit:", this.hideUploadEdit);
        },

        // http-request自定义上传
        ImgUploadSectionFile(param) {
            this.param = param;
        },

        // before-upload上传文件之前的钩子,参数为上传的文件
        // 若返回 false 或者返回 Promise 且被 reject,则停止上传
        beforeAvatarUpload(file) {
            const isJPG = file.type === "image/jpeg" || file.type === "image/png";
            const isLt2M = file.size / 1024 / 1024 < 2;
            if (!isJPG) {
                this.$message.error("上传图片只能是 JPG 或 PNG 格式!");
            }
            if (!isLt2M) {
                this.$message.error("上传图片大小不能超过 2MB!");
            }
            return isJPG && isLt2M;
        },

        // 文件上传成功时的钩子
        handleSuccess(file) {
            // console.log(file);
            const data = file.data;
            //然后数据、逻辑处理
        },

创作不易,感觉有用,就点赞、收藏加关注,感谢(●'◡'●)
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北城笑笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值