五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第四節(jié):WordPress 通過 REST API 和 Vue3 開發(fā)設(shè)置選項 - 添加圖片上傳功能

2023-06-29 15:31 作者:Npcink_牧澤  | 我要投稿

承接上文,在常用選項中,圖片上傳和選擇功能用的較多,本節(jié)來實現(xiàn)這一功能,我們著重討論功能實現(xiàn),更多美化樣式以及優(yōu)化性能問題,可自行探索。此處為了便于大家理解,代碼言簡意賅。

預(yù)覽

需求如下

  • 提供一個圖片上傳按鈕

  • 可展示選中的圖片

  • 提供清空圖片按鈕

流程如下

效果如下

修改 index.js

存儲圖片鏈接值

我們添加鍵?dataImage?用于存儲選中圖片的鏈接

  1. //存儲選項值

  2. ? ?const datas = Vue.reactive({

  3. ? ? ?dataImage: "",

  4. ? ?});

在獲取選項數(shù)據(jù)時進(jìn)行賦值,這里,我修改了原來的函數(shù)名為?get_option?,更加簡潔易懂。

  1. //獲取數(shù)據(jù)

  2. ? ?const get_option = () => {

  3. ? ? ?axios

  4. ? ? ? ?.post(dataLocal.route + "pf/v1/get_option", datas, {

  5. ? ? ? ? ?headers: {

  6. ? ? ? ? ? ?"X-WP-Nonce": dataLocal.nonce,

  7. ? ? ? ? ? ?"Content-Type": "application/json",

  8. ? ? ? ? ?},

  9. ? ? ? ?})

  10. ? ? ? ?.then((response) => {

  11. ? ? ? ? ?//省略

  12. ? ? ? ? ?datas.dataImage = data.dataImage;

  13. ? ? ? ?})

  14. ? ? ? ?.catch((error) => {

  15. ? ? ? ? ?window.alert("連接服務(wù)器失敗或后臺讀取出錯!數(shù)據(jù)讀取失敗");

  16. ? ? ? ? ?console.log(error);

  17. ? ? ? ?});

  18. ? ?};

添加圖片上傳功能

我們通過以下兩個函數(shù),實現(xiàn)圖片上傳功能

  1. //上傳圖片

  2. ? ?const upload_img = (file) => {

  3. ? ? ?const formData = new FormData();

  4. ? ? ?formData.append("file", file);

  5. ? ? ?return axios

  6. ? ? ? ?.post(dataLocal.route + "wp/v2/media", formData, {

  7. ? ? ? ? ?headers: {

  8. ? ? ? ? ? ?"X-WP-Nonce": dataLocal.nonce,

  9. ? ? ? ? ? ?"Content-Type": "multipart/form-data",

  10. ? ? ? ? ?},

  11. ? ? ? ?})

  12. ? ? ? ?.then((response) => {

  13. ? ? ? ? ?// 圖片上傳成功后的處理邏輯

  14. ? ? ? ? ?const data = response.data;

  15. ? ? ? ? ?//返回圖片URL

  16. ? ? ? ? ?return data.source_url;

  17. ? ? ? ?})

  18. ? ? ? ?.catch((error) => {

  19. ? ? ? ? ?console.error(error);

  20. ? ? ? ? ?// 圖片上傳失敗后的處理邏輯

  21. ? ? ? ?});

  22. ? ?};


  23. ? ?//處理圖片上傳事件

  24. ? ?const update_img = (event) => {

  25. ? ? ?const file = event.target.files[0];

  26. ? ? ?upload_img(file).then((url) => {

  27. ? ? ? ?//將拿到的圖片URL傳給圖片變量

  28. ? ? ? ?datas.dataImage = url;

  29. ? ? ?});

  30. ? ?};

添加清空功能

添加以下代碼,實現(xiàn)清空功能

  1. //清空選擇圖片

  2. ? ?const clear_img = () => {

  3. ? ? ?datas.dataImage = "";

  4. ? ?};

添加展示模版

為了模版可以拿到對應(yīng)的功能,記得將需要的功能函數(shù)返回出來。

  1. return {

  2. ? ? ?datas,

  3. ? ? ?siteData,

  4. ? ? ?update_option,

  5. ? ? ?update_img,

  6. ? ? ?clear_img,

  7. ? ?};

模版代碼如下

  1. <input type="file" @change.native="update_img"><br/>

  2. <button type="button" @click="clear_img">清理</button><br/>

  3. <img style="width: 300px;height: auto;" ?:src=datas.dataImage v-if =datas.dataImage ><hr/>

此時刷新頁面,嘗試選擇圖片并保存,即可看到我們完成了圖片上傳功能,清理按鈕也能正常工作,記得修改選項后點擊保存按鈕。

選擇媒體庫文件

修改 index.js 文件

流程

  • 創(chuàng)建函數(shù),通過REST API 從WordPress 媒體庫中獲取圖片數(shù)據(jù)

  • vue將獲取的圖片數(shù)據(jù)展示在前端,并提供選擇按鈕

  • 選中圖片后,將值傳給選項值

  • 保存

效果

創(chuàng)建變量

我們創(chuàng)建變量用于存儲獲取的圖片信息,為了便于擴(kuò)展,這里使用reactive

  1. //存儲獲取的值

  2. ? ?const getData = Vue.reactive({

  3. ? ? ?//存儲獲取的媒體庫值

  4. ? ? ?mediaList: [],

  5. ? ?});

添加新選項

  1. ? ?//存儲選項值

  2. ? ?const datas = Vue.reactive({

  3. ? ? ?//省略

  4. ? ? ?dataSelectedImage: "",

  5. ? ?});

獲取數(shù)據(jù)也得加上

  1. //獲取數(shù)據(jù)

  2. ? ?const get_option = () => {

  3. ? ? ?axios

  4. ? ? ? ?.post(dataLocal.route + "pf/v1/get_option", datas, {

  5. ? ? ? ? ?headers: {

  6. ? ? ? ? ? ?"X-WP-Nonce": dataLocal.nonce,

  7. ? ? ? ? ? ?"Content-Type": "application/json",

  8. ? ? ? ? ?},

  9. ? ? ? ?})

  10. ? ? ? ?.then((response) => {

  11. ? ? ? ? ?//省略

  12. ? ? ? ? ?datas.dataSelectedImage = data.dataSelectedImage;

  13. ? ? ? ?})

  14. ? ? ? ?.catch((error) => {

  15. ? ? ? ? ?window.alert("連接服務(wù)器失敗或后臺讀取出錯!數(shù)據(jù)讀取失敗");

  16. ? ? ? ? ?console.log(error);

  17. ? ? ? ?});

  18. ? ?};

獲取媒體庫圖片

通過以下函數(shù)獲取圖片信息并存儲信息進(jìn)鍵?mediaList?中

  1. //獲取媒體庫圖片

  2. ? ?const getMediaList = () => {

  3. ? ? ?axios

  4. ? ? ? ?.get(dataLocal.route + "wp/v2/media")

  5. ? ? ? ?.then((response) => {

  6. ? ? ? ? ?getData.mediaList = response.data;

  7. ? ? ? ?})

  8. ? ? ? ?.catch((error) => {

  9. ? ? ? ? ?console.error(error);

  10. ? ? ? ?});

  11. ? ?};

選擇媒體庫圖片

添加以下代碼進(jìn)行選擇

  1. //從媒體庫選中圖片

  2. ? ?const selectImage = (imageUrl) => {

  3. ? ? ?datas.dataSelectedImage = imageUrl;

  4. ? ?};

添加模版

將模版用的數(shù)據(jù)進(jìn)行導(dǎo)出

  1. return {

  2. ? ? ?datas,

  3. ? ? ?siteData,

  4. ? ? ?update_option,

  5. ? ? ?update_img,

  6. ? ? ?clear_img,

  7. ? ? ?selectImage,

  8. ? ? ?getMediaList,

  9. ? ? ?getData,

  10. ? ?};

添加模版內(nèi)容

  1. <button @click="getMediaList">獲取媒體庫圖片</button>

  2. <div style="max-width: 800px;;display: flex; margin: 1em 0;">

  3. ? ? ?<div v-for="media in getData.mediaList" :key="media.id" style="float: left;">


  4. ? ? ? ?<img :src="media.source_url" style="max-width: 150px; height: auto;vertical-align: top; ">

  5. ? ? ? ?<button @click="selectImage(media.source_url)">選擇</button>

  6. ? ? ?</div>

  7. ? ? ?</div>

  8. ? ? ?<h2>{{datas.dataSelectedImage ? "已" : "未"}}選擇圖片</h2>

  9. ? ? ?<img ?:src="datas.dataSelectedImage" v-if="datas.dataSelectedImage" style="width: 150px;height: auto;"><hr/>

獲取選項值

在php 中,可通過以下方法獲取選項值

  1. ? ?echo "<br/>";

  2. ? ?echo get_option('dataImage');

  3. ? ?echo "<br/>";

  4. ? ?echo get_option('dataSelectedImage');

改進(jìn)

上述代碼還有很多改進(jìn)空間,此處為便于演示以及篇幅原因,僅敘于此。

以下是幾個可以優(yōu)化的點

  • 選中圖片后無需上傳至WordPress即可預(yù)覽,點擊保存按鈕后再上傳圖片,

  • 若圖片選項有值,則使用上傳后的圖片鏈接進(jìn)行圖片預(yù)覽

  • 優(yōu)化清理按鈕,或做成組件,可復(fù)用

本地圖片預(yù)覽功能

  1. const datas = Vue.reactive({

  2. ? ? ?dataImage: "",

  3. ? ?});


  4. const update_img = (event) => {

  5. ? ? ?const file = event.target.files[0];

  6. ? ? ?const formData = new FormData();


  7. ? ? ?//預(yù)覽圖片

  8. ? ? ?datas.dataImage = URL.createObjectURL(file);

  9. }


  10. <input type="file" @change.native="update_img"><br/>

  11. <img style="width: 300px;height: auto;" ?:src=datas.dataImage ><hr/>

總結(jié)

本節(jié)我們學(xué)習(xí)了從本地上傳圖片和從媒體庫選擇圖片。

代碼部分比較亂,尤其是模版部分,這些都會在后續(xù)的打包中進(jìn)行解決的。

能堅持到這里,你已經(jīng)很棒了,相信到這里,你已經(jīng)掌握了復(fù)選框,布爾值,單選框,多選框等內(nèi)容,我就不再過多贅述了。

下一節(jié),我們將使用Vite對現(xiàn)有 JS 文件進(jìn)行打包,并使用一些基礎(chǔ)的CSS樣式對現(xiàn)有選項進(jìn)行外觀美化,并進(jìn)一步研究數(shù)據(jù)校驗問題。


最新文章

  • 后續(xù)文章持續(xù)撰寫中,點個關(guān)注,獲取平臺最新文章推送。

  • 技術(shù)有限,還望諸位協(xié)助勘誤,于評論區(qū)指出,

  • 常一文多發(fā),最新勘定和增補(bǔ)文章于下方鏈接給出

  • www.npc.ink/277283.html


第四節(jié):WordPress 通過 REST API 和 Vue3 開發(fā)設(shè)置選項 - 添加圖片上傳功能的評論 (共 條)

分享到微博請遵守國家法律
甘德县| 沛县| 福建省| 太湖县| 上蔡县| 彝良县| 来凤县| 乌兰县| 长沙县| 九寨沟县| 孝昌县| 奉贤区| 五华县| 安吉县| 衡阳市| 浪卡子县| 铜鼓县| 平阳县| 保定市| 太谷县| 南雄市| 桐庐县| 修文县| 霸州市| 东山县| 金昌市| 湾仔区| 岱山县| 闻喜县| 桐乡市| 乌拉特后旗| 沁水县| 巴彦淖尔市| 钟山县| 曲周县| 化德县| 买车| 额尔古纳市| 延庆县| 崇文区| 彭阳县|