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 this调用规则说明
Mar 08 Javascript
IE下JS读取xml文件示例代码
Aug 05 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
基于JavaScript实现类似于百度学术高级检索功能
Mar 02 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
js实现文字选中分享功能
Jan 25 Javascript
深入剖析Express cookie-parser中间件实现示例
Feb 01 Javascript
微信小程序新手教程之启动页的重要性
Mar 03 Javascript
小程序绑定用户方案优化小结
May 15 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
Aug 06 Javascript
分享8个JavaScript库可更好地处理本地存储
Oct 12 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 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教程孙仲岳主讲
2008/01/07 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
jquery中的on方法使用介绍
2013/12/29 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python实现校园网自动登录的示例讲解
2018/04/22 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
Django 自动生成api接口文档教程
2019/11/19 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
毕业生就业自荐信
2013/12/04 职场文书
安全资料员岗位职责
2013/12/14 职场文书
网上卖盒饭创业计划书范文
2014/02/07 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
解除租房协议书
2014/12/03 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
校园新闻稿范文
2015/07/18 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android