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 相关文章推荐
firefox中用javascript实现鼠标位置的定位
Jun 17 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
Apr 12 Javascript
jQuery点击弹出下拉菜单的小例子
Aug 01 Javascript
JavaScript 中的日期和时间及表示标准介绍
Aug 21 Javascript
JavaScript prototype 使用介绍
Aug 29 Javascript
常见的jQuery选择器汇总
Nov 24 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
EasyUI实现第二层弹出框的方法
Mar 01 Javascript
Dojo获取下拉框的文本和值实例代码
May 27 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
Sep 17 Javascript
js实现简单的打印表格
Jan 15 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
ThinkPHP文件上传实例教程
2014/08/22 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Django框架模板的使用方法示例
2019/05/25 Python
初学者学习Python好还是Java好
2020/05/26 Python
HTML5标签小集
2011/08/02 HTML / CSS
室内设计专业个人的自我评价
2013/10/19 职场文书
应届生保险求职信
2013/11/11 职场文书
岗位职责风险防控
2014/02/18 职场文书
眼镜促销方案
2014/03/15 职场文书
商场父亲节活动方案
2014/08/27 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
表扬稿格式范文
2015/01/16 职场文书
Python使用openpyxl模块处理Excel文件
2022/06/05 Python