搜索页浏览历史实现本地存储

问题:编写搜索页,将搜索历史存储在本地,并显示在页面上。
解决:1、首先使用v-model双向绑定数据,获取文本框中的内容

<el-input
      placeholder="请输入需要搜索的关键字"
      class="input-with-select"
      style="width: 30vw; margin-top: 10px"
      v-model="searchVal"
    >

2、给搜索按钮添加点击事件

  <el-button
        slot="append"
        icon="el-icon-search"
        @click="submit()"
      ></el-button>

3、根据文本框输入内容时的变化,子组件向父组件传参($emit)调用方法,父组件接收参数,触发方法判断文本框是否有内容;如果没有内容直接return;如果有内容,则判断当前搜索内容在本地存储(localStorage)是否存在,如果不存在,在data中定义一个空数组(searchArr),将搜索内容添加(使用unshift从头部开始添加)至searchArr中;如果存在则将数据添加之后使用ES6(new Set() )进行去重处理,返回一个对象,再使用ES6中的Array.from(需要转变的对象)进行强制数组转化,然后使用JSON.stringify()最新的数据赋值给本地存储即可。
子组件:

 submit() {
      this.$emit("getSearchPics", this.searchVal);
      this.searchVal=''
      // console.log('搜索',this.searchVal)
    },

父组件定义子组件传过来的方法

<search-input  class="search" @getSearchPics="getSearchPhotos"></search-input>

父组件接收子组件传过来的参数:

     getSearchPhotos(searchVal) {
      //先判断搜索的内容是否为空
      if(!searchVal) return
      console.log(searchVal);
      //判断之前有没有搜索的本地存储
      if(!localStorage.getItem('searchList')){
        //没有
        localStorage.setItem('searchList',"[]")

      }else{
        //之前有
        this.searchArr=JSON.parse(localStorage.getItem('searchList'))
      }
      //增加数据,从前开始添加
      this.searchArr.unshift(searchVal)
      //ES6去重,返回对象,再转为真正的数组
      let newArr=new Set(this.searchArr)
      //给本地存储赋值,使用ES6中的Array.from(转为数组的对象)
      localStorage.setItem('searchList',JSON.stringify(Array.from(newArr)))
      }

通过循环遍历searchArr,即可在页面上显示搜索历史。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值