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 相关文章推荐
js 浏览器事件介绍
Mar 30 Javascript
js运动应用实例解析
Dec 28 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
Jul 21 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
windows下vue-cli及webpack搭建安装环境
Apr 25 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
vue的过滤器filter实例详解
Sep 17 Javascript
vue-cli 首屏加载优化问题
Nov 06 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
在Vue中使用HOC模式的实现
Aug 23 Javascript
vue中 this.$set的使用详解
Nov 17 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入门学习知识点三 PHP上传
2011/07/14 PHP
php一个找二层目录的小东东
2012/08/02 PHP
php实现的农历算法实例
2015/08/11 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
tensorflow识别自己手写数字
2018/03/14 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
html5时钟实现代码
2010/10/22 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
机械电子工程毕业生自荐信
2013/11/23 职场文书
结婚周年感言
2014/02/24 职场文书
毕业生欢送会主持词
2014/03/31 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
鲁迅故里导游词
2015/02/05 职场文书