背景
由于小程序包大小限制,我們一般都會將icon存放到cdn上。現在的開發流程需要在開發測試環境下圖片使用開發域名,線上使用生產域名。
問題重現
在小程序onLaunch的時候讀取配置文件獲取當前環境,并得到開發環境圖片域名:
./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>
圖片渲染出來了,但是在開發者工具中有報錯
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)
手機預覽就看不到圖片。。。
分析
看一下報錯信息,說本地不存在/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg這個文件。 也就是說頁面在執行onLoad之前就已經渲染了,這個時候imgHost值為空字符串,image的src拿到的圖片鏈接就是/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg,image標簽就以為這是本地圖片導致的。
修復
當然修復的方法有很多,
可以將imgHost在初始化的時候就賦值:
const app = getApp()Page({ data: { imgHost: app.globalData.imageHost }, onLoad: function () { }})
也可以在標簽中做判斷
<image src="{{imgHost ? imgHost + '/4jZ1L1qECEOsikW2JKsyHQ==/109951164304393164.jpg' : ''}}" mode="aspectFit"></image>
更多嘗試
之前都是渲染網絡圖片,如果讀取本地圖片更換不同文件夾中的同名圖片呢?發現也是如此。
如果圖片鏈接里有多個變量,就建議在wxs文件中寫一個方法來配置圖片
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。
新聞熱點
疑難解答