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

圖片上傳使用vant組件庫(kù)中的 van-uploader, 使用方法參考官網(wǎng)
vant組件庫(kù)
下面看代碼
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: '選擇相冊(cè)或拍照'
}
],
}
},
computed: {
...mapState({
remUploadImgUrls() {
return this.$store.state.uploadImgUrls;
}
})
},
methods: {
openMenu() {
this.menuShow = true
},
onSelect(item) {
this.menuShow = false
console.log(item);
if (item.name === '選擇相冊(cè)或拍照') {
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);
},
},
});
更多文章可以點(diǎn)擊《Vue.js前端組件學(xué)習(xí)教程》學(xué)習(xí)閱讀。
關(guān)于vue.js組件的教程,請(qǐng)大家點(diǎn)擊專題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。
更多vue學(xué)習(xí)教程請(qǐng)閱讀專題《vue實(shí)戰(zhàn)教程》
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用Vue實(shí)現(xiàn)圖片上傳的三種方式
- vue+elementUI實(shí)現(xiàn)表單和圖片上傳及驗(yàn)證功能示例
- vue+elementUI實(shí)現(xiàn)圖片上傳功能
- vue.js 圖片上傳并預(yù)覽及圖片更換功能的實(shí)現(xiàn)代碼
- Vue2.0實(shí)現(xiàn)調(diào)用攝像頭進(jìn)行拍照功能 exif.js實(shí)現(xiàn)圖片上傳功能
- Vue.js 2.0 移動(dòng)端拍照壓縮圖片上傳預(yù)覽功能
- vue-quill-editor實(shí)現(xiàn)圖片上傳功能
- Vue+elementUI實(shí)現(xiàn)多圖片上傳與回顯功能(含回顯后繼續(xù)上傳或刪除)
- vue+element實(shí)現(xiàn)圖片上傳及裁剪功能
- VUE+axios+php實(shí)現(xiàn)圖片上傳
相關(guān)文章
關(guān)于vue-cli 3配置打包優(yōu)化要點(diǎn)(推薦)
這篇文章主要介紹了vue-cli 3配置打包優(yōu)化要點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Vue結(jié)合后臺(tái)導(dǎo)入導(dǎo)出Excel問(wèn)題詳解
這篇文章主要介紹了Vue結(jié)合后臺(tái)導(dǎo)入導(dǎo)出Excel問(wèn)題詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
vue+koa2實(shí)現(xiàn)session、token登陸狀態(tài)驗(yàn)證的示例
這篇文章主要介紹了vue+koa2實(shí)現(xiàn)session、token登陸狀態(tài)驗(yàn)證的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
vue-cli如何修改打包項(xiàng)目結(jié)構(gòu)及前綴
這篇文章主要介紹了vue-cli如何修改打包項(xiàng)目結(jié)構(gòu)及前綴問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
VUE使用docxtemplater導(dǎo)出word文檔實(shí)例(帶圖片)
docxtemplate支持的功能很多,語(yǔ)法包含變量替換、條件判斷、循環(huán)、列表循環(huán)、表格循環(huán)等,下面這篇文章主要給大家介紹了關(guān)于VUE使用docxtemplater導(dǎo)出word功能(帶圖片)的相關(guān)資料,需要的朋友可以參考下2023-06-06
使用canvas實(shí)現(xiàn)一個(gè)vue彈幕組件功能
這篇文章主要介紹了使用canvas實(shí)現(xiàn)一個(gè)vue彈幕組件功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11
vue?parseHTML函數(shù)解析器遇到結(jié)束標(biāo)簽
這篇文章主要介紹了vue?parseHTML函數(shù)源碼解析之析器遇到結(jié)束標(biāo)簽的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
el-table實(shí)現(xiàn)嵌套表格的展示功能(完整代碼)
el-table中在嵌套一個(gè)el-table,這樣數(shù)據(jù)格式就沒(méi)問(wèn)題了,主要就是樣式,將共同的列放到一列中,通過(guò)渲染自定義表頭render-header,將表頭按照合適的寬度渲染出來(lái),本文給大家分享el-table實(shí)現(xiàn)嵌套表格的展示功能,感興趣的朋友一起看看吧2024-02-02

