vue中使用require動(dòng)態(tài)獲取圖片地址方式
使用require動(dòng)態(tài)獲取圖片地址
項(xiàng)目場(chǎng)景
項(xiàng)目中根據(jù)圖片不同的后綴名,展示不同的圖片
問題描述
直接給圖片的src綁定圖片地址,圖片不顯示,使用 require('圖片本地路徑' + '地址變量' + '.png') 也不顯示
<img :src="require('@/assets/img/' + item.url + '.png')" alt="" />原因分析
vue在DOM中直接引入的圖片會(huì)被轉(zhuǎn)為base64格式,但是使用變量引入的話,圖片不會(huì)轉(zhuǎn)為base64,所以不顯示

解決方案
使用require.context實(shí)現(xiàn)前端工程化引入文件
require.context(directory, useSubdirectories, regExp)
directory檢索的目錄useSubdirectories: 是否檢索子文件夾regExp: 匹配文件的正則表達(dá)式,一般是文件名mode: 加載模式。同步還是異步
require.context 執(zhí)行后,返回一個(gè)方法 webpackContext,這個(gè)方法又返回一個(gè) __webpack_require__ , 這個(gè) __webpack_require__ 相當(dāng)于require或者import。
同時(shí)webpackContext還有第二個(gè)靜態(tài)方法 keys與resolve,一個(gè)id屬性
keys:返回匹配成功模塊的名字組成的數(shù)組resolve:接受一個(gè)參數(shù)request,request為test文件夾下面匹配文件的相對(duì)路徑,返回這個(gè)匹配文件相對(duì)于整個(gè)工程的相對(duì)路徑id:執(zhí)行環(huán)境的id,返回的是一個(gè)字符串,只要用在module.hot.accpet,應(yīng)該是熱加載
主要代碼
const images = require.context("@/assets/test", false, /\.png$/);
let imageURL = ''
images.keys().forEach(key => {
const name = path.basename(key, '.png')
if (name === 圖片后綴名) {
imageURL = images(key).default || images(key)
}
})
return imageURL;vue中require圖片失敗問題
在vue里,require路徑上無法使用變量(會(huì)因找不到上下文環(huán)境而查找失敗),報(bào)依賴錯(cuò)誤,可通過require.context()解決。
變量在路徑上,require找不到上下文環(huán)境:
// 錯(cuò)誤
require("../assets/image/" + 變量 + "/img.jpg")變量是最后的文件名或部分文件名,上下文環(huán)境找的到可以:
// 正確
require("../assets/image/ipad/" + "變量.jpg")
require("../assets/image/ipad/i" + "變量.jpg")
require("../assets/image/ipad/img" + "變量.jpg")
require("../assets/image/ipad/img.jpg")require.context()
傳入三個(gè)參數(shù)分別對(duì)應(yīng):
context = require.context("../assets/image/ipad/", true, /\.(png|jpg)$/);
// 相當(dāng)于"../assets/image/ipad/img.jpg"
context("./img.jpg");
//指定上下文環(huán)境后,路徑上可用變量
// "../assets/image/ipad/" + 變量 + "/img.jpg"
context("./"+"變量"+"img.jpg");總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
10個(gè)Vue3性能優(yōu)化的實(shí)用技巧分享
這篇文章總結(jié)了10個(gè)Vue3中最容易被忽略,但對(duì)性能提升最有效的實(shí)戰(zhàn)技巧,適合新老開發(fā)者收藏使用,文中的示例代碼講解詳細(xì),感興趣的小編好可以了解下2026-01-01
Vue3中的defineExpose函數(shù)用法深入解析
這篇文章主要介紹了Vue3中的defineExpose函數(shù)用法的相關(guān)資料,defineExpose是Vue3中用于在模式下暴露組件內(nèi)部屬性和方法的輔助函數(shù),它允許父組件通過ref訪問子組件的暴露內(nèi)容,提高組件間的交互能力并保持封裝性,需要的朋友可以參考下2025-01-01
Vue新手指南之創(chuàng)建第一個(gè)vue-cli腳手架程序
vue-cli 是一個(gè)官方發(fā)布 vue.js 項(xiàng)目腳手架,使用 vue-cli 可以快速創(chuàng)建 vue 項(xiàng)目。這篇文章主要給大家介紹了關(guān)于Vue新手指南之創(chuàng)建第一個(gè)vue-cli程序的相關(guān)資料,需要的朋友可以參考下2021-05-05
vue.js前后端數(shù)據(jù)交互之提交數(shù)據(jù)操作詳解
這篇文章主要介紹了vue.js前后端數(shù)據(jù)交互之提交數(shù)據(jù)操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了vue.js前后端數(shù)據(jù)交互相關(guān)的表單結(jié)構(gòu)、約束規(guī)則、數(shù)據(jù)提交等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-04-04
vue實(shí)現(xiàn)動(dòng)態(tài)路由的方法及路由原理解析
這篇文章主要介紹了路由原理及vue實(shí)現(xiàn)動(dòng)態(tài)路由,Vue Router 提供了豐富的 API,可以輕松地實(shí)現(xiàn)路由功能,并支持路由參數(shù)、查詢參數(shù)、命名路由、嵌套路由等功能,可以滿足不同應(yīng)用程序的需求,需要的朋友可以參考下2023-06-06
vue+element-ui表格自定義列模版的實(shí)現(xiàn)
本文主要介紹了vue+element-ui表格自定義列模版的實(shí)現(xiàn),通過插槽完美解決了element-ui表格自定義列模版的問題,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
preload對(duì)比prefetch的功能區(qū)別詳解
這篇文章主要為大家介紹了preload對(duì)比prefetch的使用區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Vue2?響應(yīng)式系統(tǒng)之深度響應(yīng)
這篇文章主要介紹了Vue2?響應(yīng)式系統(tǒng)之深度響應(yīng),文章基于Vue2?響應(yīng)式系統(tǒng)的相關(guān)資料展開對(duì)Vue2?深度響應(yīng)的介紹,需要的小伙伴可以參考一下2022-04-04
Vue中引入使用patch-package為依賴打補(bǔ)丁問題
這篇文章主要介紹了Vue中引入使用patch-package為依賴打補(bǔ)丁問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

