vue2+elementui 实现图片上传组件保存后图片回显,复选框回显

  1. el-upload 组件回显

组件代码 v-model="opinionForm.imgs" 是表单数据, :file-list="files" files代表当前组件已经上传的图片列表, :auto-upload="true" 需要设置自动提交

       <el-form-item  v-if="showType" prop="imgUrl">
            <el-upload
              ref="upload"
              v-model="opinionForm.imgs"
              :action="imgUpload()"
              multiple
              list-type="picture-card"
              name="img"
              :auto-upload="true"
              style="float:left;"
              :limit="10"
              :on-remove="handleRemove"
              :on-exceed="onExceed"
              :on-change="onChangeImg"
              :before-remove="beforeRemove"
              :on-preview="handlePreview"
              :on-success="handleSuccess"
              :file-list="files"
            >
              <div style="position: relative;float: left">
                <i  style="position: absolute;top: 8px;left: 8px" class="el-icon-plus"></i>
              </div>
            </el-upload>
            <el-dialog :visible.sync="dialogVisible">
              <img width="100%" :src="dialogImageUrl" alt="">
            </el-dialog>
          </el-form-item>

图片回显是保存后重新打开页面后,将后端查询出的图片地址重新赋给files属性,此处需要注意files属性脱离表单对象。就可以实现图片回显

   viewShowImg(){ 
        //将图片赋值给files对象
      this.files = this.opinionForm.imgs.map(t=>{
        var obj = {}
        obj.url = t
        return obj
      })
    },
    getOpinionById(id){   //查询对象
      this.$fetch("/api/opinion/getById",{id:id}).then(re=>{
        this.opinionForm = re.data;
        this.select_file_types = re.data.needFileTypes.split(",");
        this.viewShowImg();
      })
    },

复选框回显

此处为组件代码和效果:


          <template slot="label">
            <i class="el-icon-office-building"></i>
            需要提交文件
          </template>
          <el-form-item  v-if="showType"  prop="select_file_types">
            <el-checkbox-group v-model="select_file_types" >
<!--              <el-checkbox v-for="f in fileTypes" :label="f" :key="f" @change="(val)=>(checkChange(val,f))">-->
              <el-checkbox isLimitDisabled="flase" v-for="f in fileTypes" :label="f" :key="f" >
              </el-checkbox>
              <el-input style="border-bottom: 1px solid #747981;display: inline-block;width: 180px" v-model="otherTypeValue"  ></el-input>
            </el-checkbox-group>
          </el-form-item>
          <span  class="span-text" v-else>
            {{opinionForm.needFileTypes}}
          </span>
        </el-descriptions-item>

需要实现保存后,修改时可以回显之前选中的数据,此处的重点是v-model="select_file_types" 绑定的数组不能是表单对象,否则失效,无法实现数据回显

调用后台查询完成后,将查询的字符换转成数组赋值为v-model即可

this.select_file_types = re.data.needFileTypes.split(",");

element-ui 的上传组件是基于 Upload 组件封装的,它提供了多种上传方式,其中包括上传前先保存在本地的方式。具体实现方法如下: 1. 设置上传组件的 action 属性为一个具体的 URL 地址或者一个接口方法。 ```html <el-upload class="upload-demo" action="/upload" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess" :on-error="handleUploadError" :data="formData" :file-list="fileList" multiple :limit="3" :auto-upload="false"> <el-button size="small" type="primary">上传文件</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> ``` 2. 设置 before-upload 钩子函数,在这个函数中,我们可以将文件保存到本地,并且返回 false,阻止文件上传。 ```js handleBeforeUpload(file) { // 保存文件到本地 const fileReader = new FileReader(); fileReader.readAsDataURL(file); fileReader.onload = (e) => { const src = e.target.result; this.fileList.push({ name: file.name, url: src }); }; // 阻止文件上传 return false; } ``` 3. 设置 uploadFiles 方法,在这个方法中,我们可以将保存在本地的文件上传到服务器。 ```js uploadFiles() { // 上传所有保存在本地的文件 this.fileList.forEach(file => { const formData = new FormData(); formData.append('file', file); axios.post('/upload', formData) .then(response => { const res = response.data; // 处理上传成功的响应 }) .catch(error => { console.log(error); // 处理上传失败的响应 }); }); } ``` 通过以上步骤,我们可以实现将上传的文件先保存在本地,然后再上传到服务器的功能。需要注意的是,这种方式只适用于单文件上传,如果是多文件上传,需要对代码进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值