微信小程序存儲方式官方文檔說得很清楚,同步和異步。保存數(shù)據(jù)有以下兩種方式:
wx.setStorage 異步保存
?wx.setStorageSync同步保存
獲取數(shù)據(jù)也是兩種:
wx.getStorage 異步獲取
?wx.getStorageSync同步獲取
今天主要說一下我自己在使用中遇到的一點坑,就是在存儲成功后跳轉(zhuǎn)下一個頁面卻取不到值了。還有最后的解決辦法。
具體使用情景是這樣的,程序一進來有個登錄界面,輸入賬號密碼后登錄成功,服務(wù)器會返回該用戶的具體信息,其中就包括我立即需要保存下來,供全局使用的用戶token。
具體代碼如下:
if(response.data.success){
? //存儲token
? wx.setStorageSync("token", response.data.data.token)
? wx.setStorageSync("headPictures", response.data.data.employeeMap.headPictures)
? wx.setStorageSync("employeeName", response.data.data.employeeMap.employeeName)
? ? wx.switchTab({
? ? ? url: '../taskList/taskList',
? ? })
}
不難發(fā)現(xiàn)當訪問成功后跳轉(zhuǎn)下一個頁面。
在下一個頁面Page內(nèi)代碼:
/**
? * 頁面的初始數(shù)據(jù)
? */
? data: {
? token:wx.getStorageSync("token"),
? }
直接給data內(nèi)token賦值。但是這時候打印this.data.token卻是空的,沒有取到值。另外我也試了另外一個方法, 直接聲明有個變量接收,如:var token =?wx.getStorageSync("token")? 打印出來也是一樣,沒有值。
解決辦法:其實也不算是辦法吧,就是小程序不支持這么干,不支持你這么寫。想要得到這個值,直接使用wx.getStorageSync("token")即可?;蛘卟幌脒@么長就使用如下樣式賦值:
?this.setData({
token:wx.getStorageSync("token"),
})
就這么簡單,但是入坑了。寫出來提醒一下大家不要跟我一樣,自認為寫得沒啥毛病,以為微信小程序的API又有啥bug呢。