前端-实现多个el-upload操作及其回显

实现多个el-upload操作及其回显

摘要:

翻阅了大量关于el-upload相关的资料,发现还没实现多个el-upload上传的文章,刚好项目有这功能需求(纯属多余的功能,bug多,仅供参考)

此方法是添加多个上传控件,每个控件限制上传一个文件

<div  v-for="(fileFormData, index) in fuFileList" :key="index">
    <el-input v-model="fileFormData.id" placeholder="" class="inp-llll":disabled="true"></el-input>  
       <el-button type="danger" size="mini" @click="delete(index,fileFormData)"><i class="el-icon-delete-solid"></i>删除</el-button>
         <el-form-item label="上传资源文件" prop="uploading">
         <el-upload
         class="upload-demo"
          drag
          multiple
          :file-list="fileFormData | zhuanhua"  //传的是对象作处理
          :on-success="function (res, file){return onSuccess(res, file, index)}"
          :before-upload="function (res, file){return beforeUpload(res, file, index)}"
          :limit="1"
          action="调用方法不过多赘述">
   <div class="el-upload__text">只允许上传一个文件,<em>点击上传</em></div>
               </el-upload>
               </el-form-item>
				 <el-button type="primary" @click="addfuFile(id)"><i class="el-icon-circle-plus"></i>添加一个附件上传 </el-button>
                </el-form>
                    </el-row>
                </div>
<script>
	//上传控件中的 :file-list 是一个数组,但是我们从数据库中取出来得只是一个路径,所以要处理一下返回数组
    Vue.filter('zhuanhua', function (value) {
        if (!value.file) {
            return ""
        }
        return [{name:value.title,url:value.file}]
    })
    let pop = new Vue({
        el: "#nav",
        data() {
            return {
                filePath: [],
                fuFileList:[],
            }
        },
        methods: {
            //点击修改内容时,回显上传内容
            getFile(){
                const _this = this;
                $.ajax({
                    url:url
                    type: 'get',
                    contentType: "application/json",
                    success: function (res) {
                    		//回显多个上传控件
                            _this.fuFileList = res.data;
                    },
                    error: function (res) {
                    }
                })
            },

            //此方法是读取数据库的数据,点击修改内容,该控件要回显已上传的路径绑定的是:file-list,是一个数组 比如[{name:你好,url:uplpad/../../},{name:啊哈哈哈,url:upload/jitang.excel},{name:鸡汤,url:...}]
            getMyFile() {
                const _this = this;
                    $.ajax({
                        url: url,
                        type: 'get',
                        contentType: "application/json",
                        success: function (res) {
                                _this.fileList = res.data.data;   
                        },
                        error: function (res) {
                        }
                    })
            },
           //成功后回调
            onSuccess(res, file, index){
           // index就是下标值,this.filePath定义为数组,传的是对象
                this.filePath[index]={file};
                进行添加操作时拿此filePath,具体路径console.log打印下
            },
            // 上传前
            beforeUpload(file){
				//具体有何作用未发掘
            },
            //添加附件上传 (控制台会报filelist的错,因为就是filelist要求是数组,而我们传的是只是一条路径信息,但是不影响,在回显的时候已经通过vue.filter作处理了)
            addfuFile(id){
                this.fuFileList.push({id:''});
            },
        },
    })

</script>
</html>

温馨提示

1点击删除上传控件时,有好几种情况,回显内容作修改,删除已经上传过的控件,需要判断通过id是否存在来确认是已经上传好的 还是刚添加的,删除已经上传好的需要拿id去数据库删除。

2表单添加时,要拿的是成功后回调的filePath的路径,而表单回显内容作修改,要拿的是fuFileList对象里的数据进行保存。

3这个需求总感觉有很多地方很难考虑的清楚,还是别用的好。比如在修改时,可能会发生新添加上传控件,又有删除已上传的控件,亦或者删除回显上传控件中的文件。此时更新数据,可能会导致路径不对版的情况。

4自我感觉唯一有用的也就回显的操作。

大家有任何问题都可以发出来谈论下。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实现二次封装el-upload回显多个图片,你可以按照以下步骤进行: 1. 在el-upload组件的基础上封装一个新组件,并命名为MultiUpload。 2. 在MultiUpload组件中,添加一个data属性,用于存储已上传的图片路径数组。 3. 在el-upload组件中,添加一个success事件处理函数。在该函数中,将上传成功的图片路径添加到data属性中保存。 4. 在MultiUpload组件中,添加一个template模板。该模板中,可以使用v-for指令遍历data属性中的图片路径数组,并将每个图片路径渲染到页面上。 下面是一个简单的MultiUpload组件示例代码: ``` <template> <el-upload action="/upload" :on-success="handleSuccess" multiple :show-file-list="false"> <el-button type="primary">点击上传</el-button> </el-upload> <div v-for="url in imageUrlList" :key="url"> <img :src="url" alt="uploaded image" style="max-width: 100%;"> </div> </template> <script> export default { data() { return { imageUrlList: [] } }, methods: { handleSuccess(response, file, fileList) { this.imageUrlList.push(response.url) } } } </script> ``` 在这个示例代码中,MultiUpload组件使用element-ui中的el-upload组件,并通过v-for指令遍历了imageUrlList数组中的图片路径,并将每个图片路径渲染到页面上。在handleSuccess方法中,将上传成功的图片路径添加到imageUrlList数组中保存。 使用这个二次封装的MultiUpload组件,只需要像使用el-upload组件一样使用即可。例如: ``` <multi-upload></multi-upload> ``` 这里没有传递任何属性或事件处理函数,因为MultiUpload组件中已经处理了所有必要的逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

牧羊人Ovo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值