vue中使用require動(dòng)態(tài)獲取圖片地址方式
使用require動(dòng)態(tài)獲取圖片地址
項(xià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)文章
VUE +Element 實(shí)現(xiàn)多個(gè)字段值拼接功能
這篇文章主要介紹了VUE +Element 實(shí)現(xiàn)多個(gè)字段值拼接,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04Vue element-admin權(quán)限控制之按鈕使用
這篇文章主要介紹了Vue element-admin權(quán)限控制之按鈕使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04Vue 實(shí)現(xiàn)輸入框新增搜索歷史記錄功能
這篇文章主要介紹了Vue 輸入框新增搜索歷史記錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10詳解Vue2.X的路由管理記錄之 鉤子函數(shù)(切割流水線)
本篇文章主要介紹了Vue2.X的路由管理記錄之 鉤子函數(shù)(切割流水線),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05vue中formdata傳值給后臺(tái)時(shí)參數(shù)為空的問題
這篇文章主要介紹了vue中formdata傳值給后臺(tái)時(shí)參數(shù)為空的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06每天學(xué)點(diǎn)Vue源碼之vm.$mount掛載函數(shù)
這篇文章主要介紹了vm.$mount掛載函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03使用provide/inject實(shí)現(xiàn)跨組件通信的方法
在 Vue 應(yīng)用中,組件間通信是構(gòu)建復(fù)雜應(yīng)用時(shí)的一個(gè)常見需求,Vue3.x 提供了provide和inject API,讓跨組件通信變得更加簡潔和高效,本文將深入探討如何使用provide和inject在Vue3.x中實(shí)現(xiàn)跨組件通信,并通過示例代碼一步步進(jìn)行說明,需要的朋友可以參考下2024-03-03詳解vue父子組件關(guān)于模態(tài)框狀態(tài)的綁定方案
這篇文章主要介紹了詳解vue父子組件關(guān)于模態(tài)框狀態(tài)的綁定方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06