vant中如何修改用戶的頭像
vant修改用戶的頭像
我們的項(xiàng)目中經(jīng)常會(huì)遇到用戶個(gè)人信息的修改,當(dāng)然用的組件就是 vant 中的 van-uploader 組件, 但是這個(gè)組的是有一個(gè)回顯功能的, 它的樣式不太符合我們, 更改用戶頭像的場(chǎng)景
對(duì)比一下
van-uploader 的本來(lái)的樣式是這樣的

而我們需要修改用戶頭像的樣式是這樣的

我們的需求就是 上傳完圖像之后, 再次點(diǎn)擊頭像, 還可以再次上傳一個(gè)新的頭像, 這樣的需求, van-uploader 中的 fileList是實(shí)現(xiàn)不了的
那么我是怎么實(shí)現(xiàn)這個(gè)功能的呢?
我沒(méi)有使用 van-uploader 的 fileList 屬性, 我使用的它的一個(gè) slot 的插槽功能

圖中的 van-image 的src 是寫死了的, 它可以通過(guò) 接口請(qǐng)求返回的數(shù)據(jù)來(lái)改變。會(huì)的都會(huì),不用多說(shuō)
這樣就實(shí)現(xiàn)我們的想要的功能
vant實(shí)現(xiàn)純客戶端用戶頭像上傳預(yù)覽
<style lang="less" scoped>
.EditUserINfo {
.avatar {
width: 30px;
height: 30px;
}
/* 樣式穿透 */
/deep/ .van-image-preview__cover{
/* 取消樣式設(shè)置 */
top: unset;
left: 0;
right: 0;
bottom: 0;
.van-nav-bar{
background: #000;
}
}
}
</style>
<template>
<div class="EditUserINfo">
<van-nav-bar title="編輯資料" left-arrow @click-left="$router.back()"></van-nav-bar>
<van-cell-group>
<van-cell title="頭像" is-link @click="onAvatarClick">
<van-image class="avatar" round :src="user.photo" />
</van-cell>
<!-- 表單元素的hidden屬性:隱藏表單元素 -->
<input type="file" hidden ref="file" @change="onFileChange" />
<van-cell title="昵稱" is-link :value="user.name"></van-cell>
<van-cell title="介紹" is-link value="內(nèi)容"></van-cell>
<van-cell title="性別" is-link :value="user.gender===0?'男':'女'"></van-cell>
<van-cell title="生日" is-link :value="user.birthday"></van-cell>
</van-cell-group>
<!-- 頭像預(yù)覽,預(yù)覽關(guān)閉文件重置 -->
<van-image-preview v-model="isPreviewShow" :images="images" @close="$refs.file.value=''">
<!-- 插入插槽cover -->
<van-nav-bar
slot="cover"
left-text="取消"
right-text="確定"
@click-left="isPreviewShow=false"
@click-right="onUpdateAvatar"
/>
</van-image-preview>
</div>
</template>
<script>
export default {
name: "EditUserINfo",
components: {},
props: {},
data() {
return {
user: {
photo: "https://img.yzcdn.cn/vant/cat.jpeg",
name: "凱文",
gender: "男",
birthday: "1996-12-18"
}, //用戶信息
isPreviewShow: false,
images: [] //預(yù)覽圖片列表
};
},
watch: {},
computed: {
file() {
return this.$refs["file"];
}
},
methods: {
onAvatarClick() {
this.file.click();
},
onFileChange() {
// 1.拿到file類型input選擇的文件對(duì)象
const fileObj = this.file.files[0];
// 2.使用window.URL.createObjectURL(file)得到文件數(shù)據(jù)
const fileData = window.URL.createObjectURL(fileObj);
// 3.將img.src = 第2步的結(jié)果
this.images = [fileData];
this.isPreviewShow = true;
},
onUpdateAvatar() {
// 1.構(gòu)造包含文件數(shù)據(jù)的表單對(duì)象
// 注意:含有文件的服務(wù)務(wù)必要放到FormData中
// 用代碼來(lái)構(gòu)造一個(gè)表單對(duì)象,主要目的是用來(lái)異步發(fā)送文件上傳
// 參數(shù)一:鍵
// 參數(shù)二:值
const fd = new FormData()
fd.append('photo',this.file.files[0])
this.$toast.loading({
duration: 1000,
message:'保存中',
forbidClick:true
})
this.isPreviewShow =false
//this.$toast.success('保存成功')
}
},
created() {},
mounted() {}
};
</script>以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
el-table實(shí)現(xiàn)轉(zhuǎn)置表格的示例代碼(行列互換)
這篇文章主要介紹了el-table實(shí)現(xiàn)轉(zhuǎn)置表格的示例代碼(行列互換),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-02-02
vue項(xiàng)目實(shí)戰(zhàn)之圓柱狀水波效果實(shí)現(xiàn)
最近工作中實(shí)現(xiàn)的一個(gè)效果不錯(cuò),分享給大家,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目實(shí)戰(zhàn)之圓柱狀水波效果實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
vue input實(shí)現(xiàn)點(diǎn)擊按鈕文字增刪功能示例
這篇文章主要介紹了vue input實(shí)現(xiàn)點(diǎn)擊按鈕文字增刪功能,涉及基于vue.js的事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-01-01
vue+element實(shí)現(xiàn)動(dòng)態(tài)加載表單
這篇文章主要為大家詳細(xì)介紹了vue+element實(shí)現(xiàn)動(dòng)態(tài)加載表單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
Vue中Router路由兩種模式hash與history詳解
這篇文章主要介紹了Vue中Router路由的兩種模式,分別對(duì)hash模式與history模式作了簡(jiǎn)要分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09
自定義Vue中的v-module雙向綁定的實(shí)現(xiàn)
這篇文章主要介紹了自定義Vue中的v-module雙向綁定的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Vite多環(huán)境配置項(xiàng)目高定制化能力詳解
這篇文章主要為大家介紹了Vite多環(huán)境配置項(xiàng)目高定制化能力詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
仿照Element-ui實(shí)現(xiàn)一個(gè)簡(jiǎn)易的$message方法
這篇文章主要介紹了仿照Element-ui實(shí)現(xiàn)一個(gè)簡(jiǎn)易的$message方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

