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 相关文章推荐
JQuery中的ready函数冲突的解决方法
May 17 Javascript
jquery控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
Jul 05 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
Apr 25 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
JavaScript必知必会(三) String .的方法来自何方
Jun 08 Javascript
AngularJS基础 ng-focus 指令简单示例
Aug 01 Javascript
基于jquery实现弹幕效果
Sep 29 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
Feb 27 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
DISCUZ 分页代码
2007/01/02 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
python距离测量的方法
2018/03/06 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
numpy 声明空数组详解
2019/12/05 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
python如何设置静态变量
2020/09/07 Python
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
职业生涯规划书前言
2014/04/15 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
班组长安全工作职责
2014/07/15 职场文书
关于工作经历的证明书
2014/10/11 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
优质护理心得体会
2016/01/22 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
JavaScript的function函数详细介绍
2021/11/20 Javascript