EA&UML日拱一卒-微信小程式實戰:位置鬧鈴 (17)-儲存和取出設定資訊
設定了監控點之後,小程式會取得最新位置,判斷各個監控點的到達,離開情況並播放提示音。很多情況下,使用者會希望這些資訊可以儲存起來以便將來使用。
這就是今天的主題:在小程式中儲存設定資訊。
API
位置鬧鈴使用微信小程式API中以下的資料快取介面儲存設定資訊,本節內容來自微信小程式開發文件。
wx.setStorageSync(KEY,DATA)
將 data 儲存在本地快取中指定的 key 中,會覆蓋掉原來該 key 對應的內容,這是一個同步介面。
引數說明:
引數 | 型別 | 必填 | 說明 |
---|---|---|---|
key | String | 是 | 本地快取中的指定的 key |
data | Object/String | 是 | 需要儲存的內容 |
wx.getStorageSync(KEY)
從本地快取中同步獲取指定 key 對應的內容。
引數說明:
引數 | 型別 | 必填 | 說明 |
---|---|---|---|
key | String | 是 | 本地快取中的指定的 key |
程式碼實現
設定資訊
儲存操作的物件是Alarm陣列,每個Alarm物件的結構如下:
上半部分是資料成員,下半部分是prototype。需要儲存的是資料成員部分。稍微注意一下原型資訊,它列出了Alarm類的方法,表明這個資料是一個Alarm物件。
儲存資料
只要一行程式碼。
wx.setStorageSync('alarms',this.globalData.alarms)
只是這麼一個簡單的操作,所有資料都可以被儲存。嚴格地講,表示狀態的部分是不需要儲存的,但是為了處理簡單這裡就不做區分了。
取出資料
如果是一般的情況,也是隻要一行。
this.globalData.alarms = wx.getStorageSync('alarms') || []
這是取出地資料是這樣的:
物件屬性資料的部分和儲存時是一樣的;下面的prototype部分不一樣的。原因應該是API不認識Alam類,所以儲存和取出時只是作為一般物件來處理。
為了解決這個問題,位置鬧鈴在取出資料時進行了如下處理:
varthat =this
varalarm_array = wx.getStorageSync('alarms') || []
alarm_array.forEach(function(alarm_data){
that.globalData.alarms.push(
})
首先作為一般的資料物件取出,然後根據資料物件建立Alarm物件。
參考資料
wx.setStorageSync
https://mp.weixin.qq.com/debug/wxadoc/dev/api/data.html#wxsetstoragesynckeydata
wx.getStorageSync
https://mp.weixin.qq.com/debug/wxadoc/dev/api/data.html#wxgetstoragesynckey
位置鬧鈴原始碼
https://github.com/xueweiguo/alarmmap
寫在文章的最後