vue實現(xiàn)圖片上傳功能
本文實例為大家分享了vue實現(xiàn)圖片上傳功能的具體代碼,供大家參考,具體內(nèi)容如下
先看效果

圖片上傳使用vant組件庫中的 van-uploader, 使用方法參考官網(wǎng)
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前端組件學(xué)習(xí)教程》學(xué)習(xí)閱讀。
關(guān)于vue.js組件的教程,請大家點擊專題vue.js組件學(xué)習(xí)教程進行學(xué)習(xí)。
更多vue學(xué)習(xí)教程請閱讀專題《vue實戰(zhàn)教程》
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用Vue實現(xiàn)圖片上傳的三種方式
- vue+elementUI實現(xiàn)表單和圖片上傳及驗證功能示例
- vue+elementUI實現(xiàn)圖片上傳功能
- vue.js 圖片上傳并預(yù)覽及圖片更換功能的實現(xiàn)代碼
- Vue2.0實現(xiàn)調(diào)用攝像頭進行拍照功能 exif.js實現(xiàn)圖片上傳功能
- Vue.js 2.0 移動端拍照壓縮圖片上傳預(yù)覽功能
- vue-quill-editor實現(xiàn)圖片上傳功能
- Vue+elementUI實現(xiàn)多圖片上傳與回顯功能(含回顯后繼續(xù)上傳或刪除)
- vue+element實現(xiàn)圖片上傳及裁剪功能
- VUE+axios+php實現(xiàn)圖片上傳
相關(guān)文章
詳談Object.defineProperty 及實現(xiàn)數(shù)據(jù)雙向綁定
這篇文章主要介紹了詳談Object.defineProperty 及實現(xiàn)數(shù)據(jù)雙向綁定,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Vue Echarts渲染數(shù)據(jù)導(dǎo)致殘留臟數(shù)據(jù)的問題處理
這篇文章主要介紹了Vue Echarts渲染數(shù)據(jù)導(dǎo)致殘留臟數(shù)據(jù)的問題處理,文中通過代碼示例給大家講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-08-08
Vue3 Pinia獲取全局狀態(tài)變量的實現(xiàn)方式
這篇文章主要介紹了Vue3 Pinia獲取全局狀態(tài)變量的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
基于Vite2.x的Vue 3.x項目的搭建實現(xiàn)
這篇文章主要介紹了基于Vite2.x的Vue 3.x項目的搭建實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

