微信小程序拼接图片链接无底洞深入探究


Posted in Javascript onSeptember 03, 2019

背景

由于小程序包大小限制,我们一般都会将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文件中写一个方法来配置图片

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
前端开发必须知道的JS之原型和继承
Jul 06 Javascript
chrome原生方法之数组
Nov 30 Javascript
利用json获取字符出现次数的代码
Mar 22 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
jQuery中toggleClass()方法用法实例
Jan 05 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
Jan 13 Javascript
基于jQuery实现动态数字展示效果
Aug 12 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
Feb 09 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
Sep 17 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
layui radio单选限制下一个radio单选的实例
Sep 03 #Javascript
JavaScript Array对象基本方法详解
Sep 03 #Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 #Javascript
layui 实现自动选择radio单选框(checked)的方法
Sep 03 #Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 #Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 #Javascript
Layui 动态禁止select下拉的例子
Sep 03 #Javascript
You might like
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
php遍历CSV类实例
2015/04/14 PHP
JavaScript的类型简单说明
2010/09/03 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
jquery实现下拉框多选方法介绍
2017/01/03 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python lxml模块安装教程
2015/06/02 Python
浅谈Python处理PDF的方法
2017/11/10 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python dataframe NaN处理方式
2019/12/26 Python
Python实现自动访问网页的例子
2020/02/21 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
Python 解析简单的XML数据
2020/07/24 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
梵蒂冈和罗马卡:Omnia Card Pass
2018/02/10 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
化学实验员岗位职责
2013/12/28 职场文书
农村婚礼证婚词
2014/01/08 职场文书
教师个人自我鉴定
2014/02/08 职场文书
物流管理专业求职信
2014/05/29 职场文书
授权委托书公证
2014/09/14 职场文书
2014年电教工作总结
2014/12/19 职场文书
颐和园导游词400字
2015/01/30 职场文书
2019求职信大礼包
2019/05/15 职场文书
Java界面编程实现界面跳转
2022/06/16 Java/Android