wx.getStorage非同步和wx.getStorageSync同步區別
關於本地快取
1.wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSync)、wx.clearStorage(wx.clearStorageSync)
可以對本地快取進行設定、獲取和清理。本地快取最大為10MB
2.localStorage 是永久儲存
一、非同步快取
wx.setStorage(OBJECT)
將資料儲存在本地快取中指定的 key 中,會覆蓋掉原來該 key 對應的內容
1 2 3 4 5 6 7 8 9 |
|
wx.getStorage(OBJECT)
從本地快取中非同步獲取指定 key 對應的內容。
1 2 3 4 5 6 7 8 9 10 11 |
|
wx.getStorageInfo(OBJECT)
非同步獲取當前storage的相關資訊
1 2 3 4 5 6 7 8 9 10 11 12 13 |
console.log(res.limitSize)
|
wx.removeStorage(OBJECT)
從本地快取中非同步移除指定 key 。
1 2 3 4 5 6 7 8 9 10 11 |
|
二、同步快取
wx.setStorageSync(KEY,DATA)
將 data 儲存在本地快取中指定的 key 中,會覆蓋掉原來該 key 對應的內容,這是一個同步介面。
wx.getStorageSync(KEY)
從本地快取中同步獲取指定 key 對應的內容。
wx.getStorageInfoSync
同步獲取當前storage的相關資訊
wx.removeStorageSync(KEY)
從本地快取中同步移除指定 key 。
三、清理快取
wx.clearStorage()
清理本地資料快取。
wx.clearStorageSync()
同步清理本地資料快取
關於同步快取和非同步快取的區別
以Sync(同步,同時)結尾的都是都是同步快取,二者的區別是,非同步不會阻塞當前任務,同步快取直到同步方法處理完才能繼續往下執行。
但是一般情況下不要用清除所有的快取,如果想要清除相應的快取,設定對應的快取內容為空陣列就好
關於歷史搜尋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
頁面
這裡有三個繫結事件
bindinput="searchNameInput" 獲取使用者輸入的資料
bindtap="setSearchStorage" 設定本地儲存
bindtap="deleteHistory" 刪除歷史搜尋
1 2 3 4 5 6 7 8 9 10 11 |
|
當點選搜尋的時候,bindtap="setSearchStorage"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
流程這麼走:
1.使用者輸入資料,點選搜尋
2.如果資料不為空,加入(設定)本地快取
3.去伺服器搜尋使用者想要的資料,賦值給這個頁面的變數
4.點選刪除,去除本地這個key的value
這裡的快取形式的 key=>value
var searchData = wx.getStorageSync('searchData') || []
獲取本地名字為'searchData'的快取,如果'searchData'這個快取不存在就相當於重新什麼一個空陣列,賦值給searchData這個變數
searchData.push(this.data.inputValue)
將使用者輸入的值PUSH進searchData這個變數裡
wx.setStorageSync('searchData', searchData)
呼叫API介面,重新設定key = 'searchData'的這個快取的value等於searchData
下面的wx.request是請求資料的內容,說膩了,印象夠深了。
這裡沒有繫結獲取快取的bindtap,只要獲取到,然後新增到Page裡面的data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
這裡是將'searchData'這個key的快取的value為空陣列,而不是使用API提供的wx.clearStorageSync,這個會清除其他的所有快取,而我只是想清除這一個key的快取