微信小程序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)
      }
    })
  }

效果如下:


123.gif

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,695评论 1 45
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 785评论 0 3
  • 榴莲者,南方之佳果也。每到初夏,榴莲成熟,人们争相食之。 其型呈椭圆状,壳硬而刺锐,大小不一,大则八九斤...
    李磊1026阅读 306评论 1 1
  • 不知道这是不是一本爱情小说,我是当爱情看的。我不知道雪穗是不是有爱过同原但我知道同原是爱雪穗的。同原死了雪穗脸白了...
    有些时光有个地方阅读 316评论 0 0