@[TOC](开发微信小程序所遇问题 uni.previewImage())
1.小程序生命周期
onlaunch:当小程序初始化完成时,会触发onlaunch ,全局只触发一次(app.js)
onLoad:页面加载 ---- 页面注册完成后加载页面,触发onLoad方法,一个页面只会调用一次,可以在onLoad中回去打开当前页面所调用的query参数,
onShow:页面显示 — 页面加载后触发onShow。显示页面。每次打开页面都会调用一次
onReady:首次显示页面,页面初次渲染完成,会触发onReady 方法,渲染页面元素和样式,一个只会调用一次,代表页面已经准备完成,可以和视图层进行交互。对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。
onHide:页面隐藏------ 当navigateTo、底部tab切换、上传文件选择图片时调用。
onUnload:页面加载
当返回上一页wx.navigateBack、wx.relanch、wx.redirectTo时都会被调用(这里的坑有点深)。
基本上可以说执行顺序为onLaunch–onLoad–onShow–onReady–onHide.
虽然说onLaunch在onLoad之前执行,但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。
解决办法:
在APP里面onLanch中的网络请求中设置判断
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
在page的onLoad中设置一个回调
app.userInfoReadyCallback = res => {
if (res != '') {
console.log("app.globalData.userInfo")
}
}
2.uni.previewImage() 图片黑屏加载问题
getImgSrc() {
return `${base}${mineQrcode}&openid=${this.$store.state.Info.token}` //获取后端返回小程序二维码接口
},
const urls = [this.getImgSrc()] // https:xxxxx
uni.previewImage({
urls,
longPressActions: {
itemList: ['发送给朋友', '保存图片', '收藏'],
success: function (data) {
},
fail: function (err) {
uni.showToast({
title:err,
icon:'none'
})
}
}
});
可能的问题
- this.getImgSrc()未获取到数据
- url 必须是一个数组
- http的原因 Ios端只支持https
- https本来就显示的,wifi中有配置代理,导致ssl证书不过(1.取消代理,2.切换使用数据,退出重新登录)(可以通过把https加载到图片地址中,报错就替换成http)
3.uni.showModal() 中content内容换行
可以使用“\r\n”换行 在真机预览中查看效果
uni.showModal({
content:"内容:\r\n 1.工作重点 \r\n 2.注意事项",
showCancel:false,
confirmText:'知道了',
success:()=>{
}
})
4. 把二进制流数据转换成base64格式
const param ={}
// arrayBuffer uni.request({}) 要带有 responseType: arraybuffer请求头
this.$api.Http(mineQrcode, 'get',param,'arrayBuffer').then(r => {
let arrayBuffer = new Uint8Array(r.data)
this.imageList = 'data:image/jpg;base64,' + uni.arrayBufferToBase64(arrayBuffer);
}