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 字符串与数组转换函数[不用split与join]
Dec 13 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
Mar 29 Javascript
通过遮罩层实现浮层DIV登录的js代码
Feb 07 Javascript
html文本框提示效果的示例代码
Jun 28 Javascript
跟我学习javascript的undefined与null
Nov 17 Javascript
jQuery实现右键菜单、遮罩等效果代码
Sep 27 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
Jquery获取radio选中值实例总结
Jan 17 jQuery
微信小程序按钮点击跳转页面详解
May 06 Javascript
vue+ESLint 配置保存 自动格式化代码
Mar 17 Javascript
JavaScript中MutationObServer监听DOM元素详情
Nov 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
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP处理会话函数大总结
2015/08/05 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
js实现拖拽效果
2015/02/12 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
python 网络爬虫初级实现代码
2016/02/27 Python
python select.select模块通信全过程解析
2017/09/20 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
python交易记录链的实现过程详解
2019/07/03 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
教师实习自我鉴定
2013/12/13 职场文书
医院党建工作总结2015
2015/05/26 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python