使用uni.previewImage()API预览图片后,关闭图片会触发onShow生命周期,而我的onShow生命周期是有函数调用的,如果预览图片后直接调用onShow生命周期,会出现逻辑错误。
目前项目适用的逻辑是,提交 form表单 触发 onshow ,,编辑保存表单 不触发 onshow,
思路最重要
1. 上传图片 处理逻辑是:
1,在onLoad 中,判断下,是否是 编辑 ,是编辑时 uni.setStorageSync('ispreviewImage',true); 存个变量为 true,否则 是 false
2,在 onShow 中,看 ispreviewImage 是 true 还是false, false(不是编辑) 执行函数,true(是编辑) 什么操作都没有
3,在编辑成功后,在把 ispreviewImage 改为 false,uni.setStorageSync('ispreviewImage',false);
上代码
onLoad(option) {
if (option.isedit) {
// 1.是编辑,存数据,true
uni.setStorageSync('ispreviewImage',true);
uni.setNavigationBarTitle({
title: "编辑"
});
}else {
// 2.不是编辑,存数据,false
uni.setStorageSync('ispreviewImage',false);
}
},
onShow() {
if( uni.getStorageSync('ispreviewImage')){
// 3. true 是 编辑状态,什么都不触发
console.log('truetrue,不触发');
}else{
console.log('falsefalse,触发');
this.gettime();
}
},
// 编辑成功 保存数据 方法里,把 数据 改为 false
saveData(){
uni.setStorageSync('ispreviewImage',false);
}
2. 预览 图片 触发 onshow的处理逻辑是
1. app.vue 页面,onshow和onHide生命周期内处理,onShow , 把数据存为 false,*uni.setStorageSync('ispreviewImage',false)* , onHide 中,判断数据,如果 是 true 就 return *if(uni.getStorageSync('ispreviewImage')){return false;}*
2. 在 图片预览方法里,把 ispreviewImage 存为 true
*uni.setStorageSync('ispreviewImage', true)*
上代码
- App.vue 页面
<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
// 1. 每次进来,都改为 false
uni.setStorageSync('ispreviewImage',false)
},
onHide: function() {
console.log('App Hide 隐藏退出')
// 2. 预览时 不隐藏页面
if(uni.getStorageSync('ispreviewImage')){
return false;
}
}
}
</script>
<style lang="scss">
@import "@/uni_modules/uview-ui/index.scss";
@import "@/common/css/common.css";
/*每个页面公共css */
</style>
2.页面中使用
// 预览 图片
previewImage() {
// 3. 点击预览,改成true
uni.setStorageSync('ispreviewImage', true)
uni.previewImage({
current: 1,
urls: [this.img] // 是个 数组 单张的([this.img]),所有的 this.imglist
// urls: this.picarr,
});
},