请叫我欧皇i 2024-01-04 17:29 采纳率: 0%
浏览 83

uniapp打包成apk后uni.setStorageSync只能存储当前页面,页面切换时获取不到存储的值

问题:uniapp打包成apk后uni.setStorageSync只能存储当前页面,页面切换时获取不到存储的值
以下是获取不到的例子:在A页面存储后在B页面是获取不到的,但是在A页面提示是存储成功了,只有在当前页面存储可以获取到内容,下面这俩个存储方法我都试了还是不行,只有打包成apk或者是运行到手机或者模拟器的时候是这样,在微信小程序和真机调试都可以获取到存储的值,有没有遇到相同问题的小伙伴帮忙解答下~

```javascript
A页面
uni.setStorageSync("token", result.token)  
    uni.setStorageSync('ceshi','ceshi')  
    uni.setStorage({  
    key:'wuyu',  
        data:'aaaaaaa',  
        success(res) {  
        console.log(res,'存储成功');  
                            }  
                        })  
B页面  
        const value =uni.getStorageSync('ceshi');  
            if(value){  
                console.log(value)  
                this.ces=value;  
            }else{  
                this.ces='没获取到'  
                console.log('没获取到');  
            }  
    uni.getStorage({  
        key: 'wuyu',  
        success:(res) =>{  
            console.log(res.data,'-----w1wuyu');  
        },  
        fail:(err)=> {  
            console.log(err,'获取不到');  
        }  
    });  
以下是获取的到的例子,在A页面存储,在A页面获取  
    uni.setStorageSync('ceshi','ceshi')  
            const value =uni.getStorageSync('ceshi');  
            console.log(value,'本地存储的值类型');  
            if(value){  
                console.log(value)  
                this.ces=value;  
            }else{  
                this.ces='没获取到'  
                console.log('没获取到');  
            } 


```

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-04 20:29
    关注

    【以下回答由 GPT 生成】

    我可以帮助解答这个问题。

    在uniapp中,使用uni.setStorageSync方法进行数据存储时,存储的数据是保存在本地缓存中的。在页面切换的过程中,uniapp框架会默认进行页面的销毁和重建,这个过程会导致本地缓存数据被清除。因此,在切换页面后,之前存储的数据无法获取到。

    解决这个问题的方法是,使用uniapp提供的全局事件总线(Event Bus)。通过事件总线,可以在页面之间进行数据的传递,实现存储和获取数据的功能。

    以下是具体的解决方案:

    1. 在main.js文件中创建全局事件总线对象:
    Vue.prototype.$eventBus = new Vue();
    
    1. 在A页面中,将要存储的数据通过事件总线发送出去:
    // A页面
    this.$eventBus.$emit('storeData', {
        token: result.token,
        ceshi: 'ceshi',
        wuyu: 'aaaaaaa'
    });
    
    1. 在B页面中,监听事件总线,获取存储的数据:
    // B页面
    mounted() {
        this.$eventBus.$on('storeData', data => {
            const value = data.ceshi;
            if (value) {
                console.log(value);
                this.ces = value;
            } else {
                this.ces = '没获取到';
                console.log('没获取到');
            }
            console.log(data.wuyu, '-----w1wuyu');
        });
    },
    

    通过以上步骤,A页面通过事件总线发送存储的数据,B页面通过监听事件总线获取数据。这样就可以实现在页面切换时获取存储的值。

    希望以上解决方案对您有帮助。如果还有其他问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月4日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用