微信小程序setStorage内容叠加不覆盖。

还是不太适应小程序这种完全脱离DOM操作的开发方式,虽然用Vue的时候也是这种方式,但是还是会偶尔用个$()和append之类的感觉方便一些。

今天做一个项目,需求是通过localstorage的方式记录用户最近搜索的内容,用户打开搜索页后把这些内容显示在搜索栏的下方,当用户搜索新关键词时自动把新关键词添加到localstorage中。

而微信小程序提供的api wx.setStorage()和wx.setStorageSync()都会覆盖原内容,无法满足需求。

于是我想法如下:
1、data中新建一个数组arr,用于存储每次搜索的关键词。
2、页面onload之后先加载wx.getStorage() 方法,让页面显示最近搜索的内容。并把现有的缓存push到arr中,这样,arr就有了以前搜索过的关键词。
3、用户点击搜索按钮后,判断用户的关键词是否在arr中,如果在,则return null,不在则把新关键词push到arr中。
4、新关键词push之后,通过setStorageSync() 方法把包含 旧关键词和新关键词的数组arr存储到Storage中。
这样缓存就不会被覆盖了。代码如下:

/*js*/
data: {
    "arr2": []
  },
//页面onload后把已经存在的缓存push到数组arr2中
onLoad: function(options) {
    var that = this;
    wx.getStorage({
      key: 'recentSearch',
      success: function(res) {
        for (let i in res.data) {
          that.data.arr2.push(res.data[i])
        };
      }
    })
  },
searchSubmit(e){
    //这里的_val是获取input值的临时变量
    let _val
    
    //判断_val是否在数组中
    if (this.data.arr2.indexOf(_val) != -1) {
   //是 不做任何操作
      return null;
    } else {
    //否,把_val push到arr2中
      this.data.arr2.push(_val)
    };
  //把新的arr2存储到缓存中
    wx.setStorageSync('recentSearch', this.data.arr2);
    wx.getStorage({
      key: 'recentSearch',
      success: function(res) {
   //输出缓存内容
        console.log(res)
      }
    })
  }

效果如下:


微信小程序setStorage内容叠加不覆盖。_第1张图片
123.gif

请忽略那条报错,那条错误和本文没有任何关系

你可能感兴趣的:(微信小程序setStorage内容叠加不覆盖。)