vue选择图片的几种方式

后台有上传图片功能,用了好几次还是还是没记住,每次都要上网找,索性写一下方法

一、 输出 base64 格式

这个可以在前端显示

html:
<input type="file" name="" id="" accept="image/jpeg,image/jpg,image/png" @change="changeImage" />
<img :src="url" width="200" height="200">
js:
data(){
	return{
		url:""
	}
},
methods:{
	changeImage(e){
      var file = e.target.files[0];
      var reader = new FileReader();
      var that = this;
      reader.readAsDataURL(file);
      console.log(reader)
      reader.onload = function(e) {
        that.url = this.result;
      };
	}
}

选择前:
在这里插入图片描述
选择后:
在这里插入图片描述
url 为 base64 格式:
在这里插入图片描述

二、输出 FormData 格式

我是用这个向后端传输,这个看不到 url 或者 base64,因此无法用此方法在前端显示选中图片

html:
<input type="text" placeholder="请输入名称" v-model="name" />
<input type="file" name="" id="" accept="image/jpeg,image/jpg,image/png" @change="changeImage" />
<button @click="confirm">提交</button>
js:
data(){
	return{
      name: "",
      formData: "",
	}
}
methods:{
	//选中图片时,创建FormData对象,将图片添加进去,并赋给data里面的formData方便提交
    changeImage(e) {
      var file = e.target.files[0];
      var formData = new FormData();
      formData.append("file", file);
      this.formData = formData;
    },
    //提交时将name参数添加进去,有其他参数再添加其他参数,然后调用接口即可
    confirm() {
      this.formData.append("name", this.name);
      this.$axios.post(url, this.formData).then((res) => {
        console.log(res);
      });
    },
}

之所以说没办法将选中图片在前端页面显示,是因为选中后的 formData 对象输出是这样的
在这里插入图片描述
也可能是我不会取,有知道的大佬可以补充一下

❀❀❀❀❀❀ 完结散花 ❀❀❀❀❀❀

Written ❤️ sywdebug.
Vue 3 中实现几百张图片的懒加载可以使用以下两种方式: 1. 基于 Intersection Observer 的封装组件 这种方式通过封装一个懒加载组件,将多张图片的懒加载逻辑统一管理起来,减少重复代码。示例代码如下: ```vue <template> <div class="lazy-container"> <div v-for="(item, index) in list" :key="index" class="lazy-item"> <img-lazy :src="item.src" :placeholder-src="item.placeholder" /> </div> </div> </template> <script> import ImgLazy from './ImgLazy.vue'; export default { name: 'LazyContainer', components: { ImgLazy }, data() { return { list: [ { src: 'https://example.com/image1.jpg', placeholder: 'https://example.com/placeholder1.jpg' }, { src: 'https://example.com/image2.jpg', placeholder: 'https://example.com/placeholder2.jpg' }, // ... 其他图片的地址和占位图地址 ] }; } }; </script> ``` 在 ImgLazy 组件中使用 Intersection Observer 实现图片的懒加载,具体实现可以参考上一个问题的回答。在 LazyContainer 组件中,通过 v-for 循环渲染多个 ImgLazy 组件,实现多张图片的懒加载。 2. Vue 3 新特性:Suspense 和异步组件 Vue 3 中新增了 Suspense 和异步组件的概念,可以更方便地实现图片懒加载。示例代码如下: ```vue <template> <div class="lazy-container"> <template v-for="(item, index) in list" :key="index"> <Suspense> <template #default> <img :src="item.src" :alt="item.alt" /> </template> <template #fallback> <img :src="item.placeholder" :alt="item.alt" /> </template> </Suspense> </template> </div> </template> <script> export default { name: 'LazyContainer', data() { return { list: [ { src: 'https://example.com/image1.jpg', placeholder: 'https://example.com/placeholder1.jpg', alt: 'image1' }, { src: 'https://example.com/image2.jpg', placeholder: 'https://example.com/placeholder2.jpg', alt: 'image2' }, // ... 其他图片的地址和占位图地址 ] }; } }; </script> ``` 在组件中,使用 Suspense 包裹一个异步组件,当异步组件加载完成时,将图片的 src 属性修改为真实的图片地址,实现懒加载。当异步组件加载时,可以通过 fallback slot 渲染一个占位图,提高用户体验。需要注意的是,异步组件需要返回一个 Promise 对象,以便在加载完成时触发 Suspense 的回调函数。 以上两种方式均可以实现多张图片的懒加载,具体选择哪种方式,可以根据实际情况和项目需求来进行选择
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值