内容简介:在vue的项目中做图片上传时,我通过上传图片后获取到input中的files属性将其进行处理,然后将其转换为base64传给后台。这个方法用在非v-for上动态生成的ref上时,可以通过 this.$refs.name.files[0]获取到相关元素,但是将这个方法用在v-for动态上传的列表中,而且ref也是通过动态生成的时候就获取不到目标元素的files。结论在最后,可以直接看。我单独上传图片的方法是
在vue的项目中做图片上传时,我通过上传图片后获取到input中的files属性将其进行处理,然后将其转换为base64传给后台。
这个方法用在非v-for上动态生成的ref上时,可以通过 this.$refs.name.files[0]获取到相关元素,但是将这个方法用在v-for动态上传的列表中,而且ref也是通过动态生成的时候就获取不到目标元素的files。结论在最后,可以直接看。
我单独上传图片的方法是
uploadImg(refName) { let file = this.$refs[refName].files[0]; let that = this; let reader = new FileReader(); let imgUrlBase64; if (file) { imgUrlBase64 = reader.readAsDataURL(file); let name = file.name.split("."); reader.onload = function(e) { let imgFile= reader.result.substring( reader.result.indexOf(",") + 1 ); let obj = { img: [ { originalFileName: name[0], fileExtension: "." + name[1], fileContent: imgFile } ] }; that.$axios .post("www.baidu.com", { obj: JSON.stringify(obj) }) .then(res => { let _data = res.data.xxx; if (_data.xxx== "1") { let imgURL = _data.img; that.imgList.push(imgURL); } }) .catch(err => { console.log(err); }); }; } }
该方法在不是通过v-for生成的ref时,可以正常使用,但是将这个方法用在v-for动态上传的列表中,而且ref也是通过动态生成的时候就遇到了问题。
template中的代码是:
<ul> <li v-for="(item, index) in list" :key="index"> <title>{{item.name}}</title> <input type="file" accept="image/png, image/gif, image/jpeg" :ref="'img' + index" @change="uploadImg('img' + index)" > </li> </ul>
经过一番排查之后,我发现这个问题是ref的问题: 当template中直接使用ref时,它会直接返回ref,但是template中这个ref是在v-for中动态生成时,它返回的是一个数组,必须通过 this.$refs[refName].files[0]才可以获取到对应的元素。所以上面的方法在加一个判断即可实现。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 微服务架构 : 获取微服务数据, 生成报表 (五)
- 设计稿生成代码核心技术揭秘:获取图片中前端组件的位置信息
- ADO.NET获取数据(DataSet)同时获取表的架构实例
- 根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID
- .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
- phpinfo获取敏感内容
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。