我自己写了一个组件用来在每个商品页面中生成关于该商品的二维码海报,使用的canvas绘制,然后保存img在临时路径,用img显示给用户看,并且可以保存
在进入页面时就加载数据,但是出现了一个问题
在ios上和开发工具上是正常的,就是进入每个商品页面会出不同的海报,海报上有对应该商品的小程序码
在安卓机上,进入不同商品页面,海报中商品的名称,价格都是按照这个商品的数据的,但是小程序码一直都不会变,始终是第一个商品的小程序码
怀疑的地方有两个:
1.在退出页面时,没有清除到对应的数据
我是在以下位置清除的,在lifetimes中detached,重置data中的内容
lifetimes: {
attached: function () {
// 在组件实例进入页面节点树时执行
},
detached: function () {
// 在组件实例被从页面节点树移除时执行
this.setData({
// 重置全部数据
})
},
},
2.后台传给我的小程序码图片数据是base64格式的,每次我都使用的以下方法来存,名称永远是同一个,会不会是由于路径不变,所以在安卓机上一直用的之前缓存的图片
function savebase64Img(base64str,callback){
console.log(base64str);
if (base64str.indexOf('base64,')!=-1){
let startIdx = 0;
startIdx = base64str.indexOf('base64,') + 7;
base64str=base64str.slice(startIdx);
}
const fsm = wx.getFileSystemManager();
const FILE_BASE_NAME = 'tmp_base64src';
const filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.jpg`;
fsm.writeFile({
filePath,
data: base64str,
encoding: 'base64',
success(){
console.log(filePath);
callback(filePath);
},
fail(err) {
console.log(err);
return (new Error('ERROR_BASE64SRC_WRITE'));
callback('');
}
})
}
以上问题只有在安卓会复现,ios及开发工具上都为正常
应该是第二个原因造成的,
搞了几个小时总算改好了,
给每个base64转图片的加了个时间戳
然后在canvas生成海报图片后把base64的小程序码图片删除了