微信小程序拼接圖片鏈接無底洞深入探究
背景
由于小程序包大小限制,我們一般都會將icon存放到cdn上。現(xiàn)在的開發(fā)流程需要在開發(fā)測試環(huán)境下圖片使用開發(fā)域名,線上使用生產(chǎn)域名。
問題重現(xiàn)
在小程序onLaunch的時候讀取配置文件獲取當(dāng)前環(huán)境,并得到開發(fā)環(huán)境圖片域名:
./app.js
const { imgHostDev, imgHostProd, env } = require('./app.config.js') App({ onLaunch: function () { this.globalData.imageHost = env == 'dev' ? imgHostDev : imgHostProd }, globalData: { imageHost: '' } })
在頁面中:./pages/index/index.js
const app = getApp() Page({ data: { imgHost: '' }, onLoad: function () { this.setData({ imgHost: app.globalData.imageHost }) } })
./pages/index/index.wxml
<image src="{{imgHost}}/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg" mode="aspectFit"></image>
圖片渲染出來了,但是在開發(fā)者工具中有報錯
VM1334:1 Failed to load local image resource /4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg
the server responded with a status of 500 (HTTP/1.1 500 Internal Server Error)
手機(jī)預(yù)覽就看不到圖片。。。
分析
看一下報錯信息,說本地不存在/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg這個文件。 也就是說頁面在執(zhí)行onLoad之前就已經(jīng)渲染了,這個時候imgHost值為空字符串,image的src拿到的圖片鏈接就是/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg,image標(biāo)簽就以為這是本地圖片導(dǎo)致的。
修復(fù)
當(dāng)然修復(fù)的方法有很多,
可以將imgHost在初始化的時候就賦值:
const app = getApp() Page({ data: { imgHost: app.globalData.imageHost }, onLoad: function () { } })
也可以在標(biāo)簽中做判斷
<image src="{{imgHost ? imgHost + '/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg' : ''}}" mode="aspectFit"></image>
更多嘗試
之前都是渲染網(wǎng)絡(luò)圖片,如果讀取本地圖片更換不同文件夾中的同名圖片呢?發(fā)現(xiàn)也是如此。
如果圖片鏈接里有多個變量,就建議在wxs文件中寫一個方法來配置圖片
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
50行代碼實現(xiàn)Webpack組件使用次數(shù)統(tǒng)計
這篇文章主要介紹了50行代碼實現(xiàn)Webpack組件使用次數(shù)統(tǒng)計,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
這篇文章主要介紹了JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()的相關(guān)資料,需要的朋友可以參考下2016-08-08Extjs 中的 Treepanel 實現(xiàn)菜單級聯(lián)選中效果及實例代碼
這篇文章主要介紹了Extjs 中 Treepanel 實現(xiàn)菜單級聯(lián)選中效果,需要的朋友可以參考下2017-08-08