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 相关文章推荐
xss文件页面内容读取(解决)
Nov 28 Javascript
表单元素与非表单元素刷新区别详细解析
Nov 06 Javascript
raphael.js绘制中国地图 地图绘制方法
Feb 12 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
javascript实现简易计算器
Feb 01 Javascript
Vue自定义指令拖拽功能示例
Feb 17 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
Jul 24 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
vue仿element实现分页器效果
Sep 13 Javascript
如何解决日期函数new Date()浏览器兼容性问题
Sep 11 Javascript
小程序实现列表倒计时功能
Jan 29 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
PHP网上调查系统
2006/10/09 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
Node.js+Express配置入门教程
2016/05/19 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
python数据封装json格式数据
2018/03/04 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
python getpass模块用法及实例详解
2019/10/07 Python
python实现根据文件格式分类
2019/10/31 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
澳大利亚百货公司:David Jones
2018/02/08 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
经典演讲稿范文
2013/12/30 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
Python数据类型最全知识总结
2021/05/31 Python