微信小程序缓存/本地属性(todo-list案例)

同步存储

wx.setStorageSync('list1', {name:"尚云科技",age:5})

同步取出

wx.getStorageSync('list1')

双向绑定案例:

this.setData({list:wx.getStorageSync('list1')})

异步存储

    wx.setStorage({
      data: {name:"天亮教育",age:4},//需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。
      key: 'list',//本地缓存中指定的 key
})

异步取出

wx.getStorage({
      key: 'list',
      success(res){
        console.log(res);
      }
    })

缓存的限制和隔离

  • 小程序宿主环境会管理不同小程序的数据缓存,不同小程序的本地缓存空间是分开的,每个小程序的缓存空间上限为10MB,如果当前缓存已经达到10MB,再通过wx.setStorage写入缓存会触发fail回调。
  • 小程序的本地缓存不仅仅通过小程序这个维度来隔离空间,考虑到同一个设备可以登录不同微信用户,宿主环境还对不同用户的缓存进行了隔离,避免用户间的数据隐私泄露。

由于本地缓存是存放在当前设备,用户换设备之后无法从另一个设备读取到当前设备数据,因此用户的关键信息不建议只存在本地缓存,应该把数据放到服务器端进行持久化存储

 

todo-list案例

wxml

<!--logs.wxml-->
<view class="container log-list">
  <text>todolist</text>
  <view class="top">
    <input type="text" model:value='{{inputValue}}'/>
    <button bindtap="add">添加</button>
  </view>
  <view class="middle">
    <text>待完成:</text>
    <block wx:for="{{list}}" wx:key="index">
      <view>
      <checkbox bindtap="select" 
      data-select-num="{{index}}" 
      data-select-item="{{item}}"
      checked="{{isChecked}}"
      >{{item}}
      </checkbox>
      <button bindtap="delete" data-select-item="{{index}}">删除</button>
      </view>
    </block>
  </view>
  <view class="bottom">
    <text>已完成:</text>
    <block wx:for="{{listed}}" wx:key="index">
      <view>
      <checkbox checked='{{checked}}'
      bindtap="selected" 
      data-select-num="{{index}}" 
      data-select-item="{{item}}"
      >{{item}}</checkbox>
      <button bindtap="deleted" data-select-item="{{index}}">删除</button>
      </view>
    </block>
  </view>
</view>

js

// logs.js

Page({
  data: {
    list:[],
    inputValue:'',
    listed:[],
    isChecked:false,
    checked:true
  },
  add(){
    this.data.list.push(this.data.inputValue)
    this.setData({inputValue:''}) 
    this.setData({list:this.data.list})
    wx.setStorageSync('list1', this.data.list)

  },
  // 待完成点击
  // 思路:1、点击时将内容当作参数传递,将内容push到已完成数组中
  //      2、点击时将索引当作参数传递,根据索引将待完成数组中元素删除
  //      3、将两个数组放入缓存中,下面操作同理
  select(e){
    this.data.listed.push(e.currentTarget.dataset.selectItem)
    this.setData({listed:this.data.listed})
    this.data.list.splice(e.currentTarget.dataset.selectNum,1)
    this.setData({list:this.data.list})
    this.setData({isChecked :false})
    // 放入缓存中
    wx.setStorageSync('list1', this.data.list)
    wx.setStorageSync('list2', this.data.listed)
  },
  // 待完成删除
  // 思路:点击时将索引当作参数传递,根据索引将数组中元素删除
  delete(e){
    this.data.list.splice(e.currentTarget.dataset.selectNum,1)
    this.setData({list:this.data.list})
    wx.setStorageSync('list1', this.data.list)
    
  },
  // 已完成点击
  selected(e){
    this.data.list.push(e.currentTarget.dataset.selectItem)
    this.setData({list:this.data.list})
    this.data.listed.splice(e.currentTarget.dataset.selectNum,1)
    this.setData({listed:this.data.listed})
    this.setData({checked :true})
    wx.setStorageSync('list1', this.data.list)
    wx.setStorageSync('list2', this.data.listed)
  },
  // 已完成删除
  deleted(e){
    this.data.listed.splice(e.currentTarget.dataset.selectNum,1)
    this.setData({listed:this.data.listed})
    wx.setStorageSync('list2', this.data.listed)
  },
  onLoad() {
    // 从缓存中取出,并赋给两个分别数组
    this.setData({list:wx.getStorageSync('list1')})
    this.setData({listed:wx.getStorageSync('list2')})
  }
})

wxss  将app.json中默认"style": "v2"删除

.log-list {
  display: flex;
  flex-direction: column;
  padding: 40rpx;
}
.log-item {
  margin: 10rpx;
}
.top{
  width: 100%;
  display: flex;
}
.top>input{
  border: 1px solid #ccc;
  width: 60%;
  height: 68rpx; 
}
.top>button{
  margin-left: 10%;
  width: 30%;
  height: 70rpx; 
  line-height: 70rpx;
}

.middle{
  margin-top: 30rpx;
  width: 100%;
}
.bottom>view,
.middle>view{
  margin-top: 20rpx;
}
.bottom button,
.middle button{
  font-size: 32rpx;
  background-color: red;
  text-align: center;
  line-height: 50rpx;
  padding: 0;
  float: right;
  margin: 0;
  width: 120rpx;
  height: 50rpx;
}


.bottom{
  margin-top: 30rpx;
  width: 100%;
}

 

posted @ 2021-10-12 20:15  从入门到入土  阅读(354)  评论(0编辑  收藏  举报