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 相关文章推荐
JavaScript的Cookies
Jan 16 Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 Javascript
JQuery中dataGrid设置行的高度示例代码
Jan 03 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
Jan 13 Javascript
jQuery切换所有复选框选中状态的方法
Jul 02 Javascript
Jquery promise实现一张一张加载图片
Nov 13 Javascript
轻松实现jquery选项卡切换效果
Oct 10 Javascript
js print打印网页指定区域内容的简单实例
Nov 01 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
JavaScript的数据类型转换原则(干货)
Mar 15 Javascript
原生js检测页面加载完毕的实例
Sep 11 Javascript
小程序两种滚动公告栏的实现方法
Sep 17 Javascript
小程序实现图片移动缩放效果
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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
php 获取可变函数参数的函数
2009/08/26 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
2013/06/06 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
js 操作select与option(示例讲解)
2013/12/20 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
用Python编写简单的微博爬虫
2016/03/04 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
python excel转换csv代码实例
2019/08/26 Python
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
学校经典推荐信
2013/10/30 职场文书
总经理助理岗位职责
2013/11/08 职场文书
教师个人鉴定材料
2014/02/08 职场文书
大一新生学期自我评价
2014/04/09 职场文书
合作协议书范本
2014/04/17 职场文书
工厂搬迁方案
2014/05/11 职场文书
学校花圃的标语
2014/06/18 职场文书
学校食品安全责任书
2015/01/29 职场文书
财政局长个人总结
2015/03/04 职场文书
2015年教师节慰问信
2015/03/23 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书