问题模块 |
---|
API和组件 |
第一次进入小程序的时候,执行
wx.setStorageSync('key', 'value')
然后打开一个新页面,执行
Page({ data: { userData: wx.getStorageSync( 'key' ), }, |
获取出来的值为空的
网友回复
锐:
我在page外面调用,获取也是空的
const userData = wx.getStorageSync('userData');
白开水:
Page 这个方法在页面被跳转前就已经执行了,那个时候 getStorage 发生在 set 之前。
建议在 onLoad 中调用 getStorage
锐:
这是不是小程序的bug啊,给个回复
锐:
获取了登录信息后写入本地缓存,然后在页面手动点击跳转到新页面
白开水:
是在 getUserInfo 以后才跳转到新页面的吗?
锐:
第一次进小程序会有问题,第二次以后就没问题了
锐:
//index.js //获取应用实例 const app = getApp() Page({ data: { motto: 'Hello World' , userInfo: {}, hasUserInfo: false , canIUse: wx.canIUse( 'button.open-type.getUserInfo' ) }, //事件处理函数 bindViewTap: function () { wx.navigateTo({ url: '../logs/logs' }) }, onLoad: function () { if (app.globalData.userInfo) { this .setData({ userInfo: app.globalData.userInfo, hasUserInfo: true }) } else if ( this .data.canIUse){ // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 // 所以此处加入 callback 以防止这种情况 app.userInfoReadyCallback = res => { this .setData({ userInfo: res.userInfo, hasUserInfo: true }) } } else { // 在没有 open-type=getUserInfo 版本的兼容处理 wx.getUserInfo({ success: res => { app.globalData.userInfo = res.userInfo this .setData({ userInfo: res.userInfo, hasUserInfo: true }) } }) } }, getUserInfo: function (e) { console.log(e); app.globalData.userInfo = e.detail.userInfo; wx.setStorageSync( 'key' , 'e.detail.userInfo' ); this .setData({ userInfo: e.detail.userInfo, hasUserInfo: true }) } }) |
//logs.js const util = require( '../../utils/util.js' ) Page({ data: { logs: [], userInfo: wx.getStorageSync( 'key' ), },
console.log( this .data.userInfo); this .setData({ logs: (wx.getStorageSync( 'logs' ) || []).map(log => { return util.formatTime( new Date (log)) }) }) } }) |
其他文件都是官方例子
白开水:
请提供一下调用
wx.setStorageSync('key', 'value')
前后的完整代码