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 Selector选择器小结
May 06 Javascript
JavaScript类属性的访问方式详解
Feb 11 Javascript
jQuery的cookie插件实现保存用户登陆信息
Apr 15 Javascript
教你在heroku云平台上部署Node.js应用
Jul 30 Javascript
JavaScript仿支付宝密码输入框
Dec 29 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
通过扫描二维码打开app的实现代码
Nov 10 Javascript
js窗口震动小程序分享
Nov 28 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
vue 本地环境跨域请求proxyTable的方法
Sep 19 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 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
Ajax PHP分页演示
2007/01/02 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
详解PHP中的Traits
2015/07/29 PHP
PHP实现简单登录界面
2019/10/23 PHP
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
JS原型链怎么理解
2016/06/27 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
wxPython中文教程入门实例
2014/06/09 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
酒店服务与管理毕业生求职信
2013/11/02 职场文书
宣传策划类求职信范文
2014/01/31 职场文书
党建工作整改措施
2014/10/28 职场文书
校运会广播稿
2015/08/19 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL