vue实现图片上传功能


Posted in Javascript onMay 28, 2020

本文实例为大家分享了vue实现图片上传功能的具体代码,供大家参考,具体内容如下

先看效果

vue实现图片上传功能

图片上传使用vant组件库中的 van-uploader, 使用方法参考官网
vant组件库

下面看代码

UploadPicture.vue

<template>
 <div class="content">
 <!-- 底部模块start -->
 <div class="bottom_bg">
 <p class="flexst pt8">上传图片</p>
 <div class="upload_bg">
 <div
 v-for="(item, index) in this.remUploadImgUrls">
 <img class="showimg" :src="item"/>
 <img
 class="delicon"
 src="@/assets/images/consult_close.png"
 @click="(e) => delImgClick(index, e)"
 />
 </div>
 <!--
 v-if="remUploadImgUrls.length < 6"
 限制最多6张
 -->
 <img
 class="addimg" src="@/assets/images/inq_addImg.png"
 v-if="remUploadImgUrls.length < 6"
 @click="openMenu"
 />
 </div>
 </div>
 <!-- 底部模块end-->
 <van-actionsheet
 v-model="menuShow"
 :actions="actions"
 cancel-text="取消"
 @select="onSelect"
 />
 <van-uploader id="upload" :after-read="onRead"/>
 </div>
</template>

<script>
 import {mapState} from 'vuex'
 export default {
 name: "UploadPicture",
 data() {
 return {
 menuShow: false,
 actions: [
 {
 name: '历史照片'
 },
 {
 name: '选择相册或拍照'
 }
 ],
 }
 },
 computed: {
 ...mapState({
 remUploadImgUrls() {
 return this.$store.state.uploadImgUrls;
 }
 })
 },
 methods: {
 openMenu() {
 this.menuShow = true
 },
 onSelect(item) {
 this.menuShow = false
 console.log(item);
 if (item.name === '选择相册或拍照') {
 return document.getElementById('upload').click();
 }
 },
 onRead(file) {
 this.$store
 .dispatch({
 type: 'uploadImg',
 payload: file.file
 })
 .then(() => {
 // Toast.clear;
 });
 },
 delImgClick(index, e) {
 let tmpList = [...this.remUploadImgUrls];
 tmpList.splice(index, 1);
 this.$store.commit('DEL_UPLOADIMG', tmpList);
 }
 },
 }

</script>

<style scoped lang="scss">
 .content {
 .bottom_bg {
 margin: 10px 8px 0;
 padding: 0 .1rem;
 background: #fff;
 .upload_bg {
 margin-top: 10px;
 display: flex;
 justify-content: space-between;
 flex-wrap: wrap;
 div {
 width: 31%;
 margin-bottom: 10px;
 position: relative;
 .showimg {
 width: 100%;
 height: 100%;
 }
 .delicon {
 position: absolute;
 right: -6px;
 top: -6px;
 width: 20px;
 height: 20px;
 }
 }
 .addimg {
 width: 31%;
 height: 31%;
 margin-bottom: 10px;
 }
 &:after {
 width: 30%;
 content: '';
 }
 }
 }
 }

</style>

src/store/index.js

import Vue from 'vue';
import vuex from 'vuex';
import { get, post} from '@/api';

Vue.use(vuex);
export default new vuex.Store({
 module: {
 },
 state: {
 uploadImgUrls: [],
 },
 mutations: { // 处理同步方法
 SET_UPLOADIMG(state, imgUrl) {
 const tmp = state.uploadImgUrls;
 tmp.push(imgUrl);
 state.uploadImgUrls = tmp;
 },
 DEL_UPLOADIMG(state, data) {
 state.uploadImgUrls = [...data];
 },
 },
 actions: { // 处理异步方法
 // 上传图片
 async uploadImg({ commit }, { payload }) {
 let f = new FormData();
 f.append('file', payload);
 const data = await post('/upload', f);
 commit('SET_UPLOADIMG', data);
 },
 },
});

更多文章可以点击《Vue.js前端组件学习教程》学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
Sep 23 Javascript
js bind 函数 使用闭包保存执行上下文
Dec 26 Javascript
JavaScript数组常用方法
Mar 02 Javascript
JavaScript ES6的新特性使用新方法定义Class
Jun 28 Javascript
vue.js+Echarts开发图表放大缩小功能实例
Jun 09 Javascript
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
玩转Koa之koa-router原理解析
Dec 29 Javascript
Vue中CSS动画原理的实现
Feb 13 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
Vue router配置与使用分析讲解
Dec 24 Vue.js
小程序实现图片移动缩放效果
May 26 #Javascript
jQuery实现的分页插件完整示例
May 26 #jQuery
js实现时间日期校验
May 26 #Javascript
Node.js API详解之 assert模块用法实例分析
May 26 #Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
May 26 #Javascript
js校验开始时间和结束时间
May 26 #Javascript
vue实现简单跑马灯效果
May 25 #Javascript
You might like
php模块memcache和memcached区别分析
2011/06/14 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
php微信开发之图片回复功能
2018/06/14 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
日语专业个人的求职信
2013/12/03 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
求职简历自我评价范例
2014/03/12 职场文书
全国文明单位申报材料
2014/05/31 职场文书
最美护士演讲稿
2014/08/27 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
《海上日出》教学反思
2016/02/23 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js
基于Python实现nc批量转tif格式
2022/08/14 Python