vue移动端搜索功能的历史搜索(最近搜索)完整功能实现,重复搜索项会更新在最前面。(利用localstorage)_移动端 vue 搜索记录-程序员宅基地

技术标签: 前端功能实现  vue  js  javascript  

实现效果如下图所示。
在这里插入图片描述

html代码块:

<template>
  <div id="Container" style="min-height: 100%; background-color: #fff">
    <searchbox/>
    <!-- 最近搜索 -->
    <div class="history" v-show="show">
      <p class="histText">最近搜索</p>
      <van-image
        class="delIcon"
        :src="require('../../assets/del.png')"
        @click.native="clearHistoryItems"
      />
    </div>
    <div class="hislist">
      <span
        class="hisitem"
        v-for="(item, index) in searchHistoryList"
        :key="index"
        v-show="show"
        @click="onSearch(item)"
        >{
   { item }}</span
      >
    </div>
  </div>
</template>

声明最近搜索的列表:

data() {
    
    return {
    
      // 搜索历史列表,初始化数据
      searchHistoryList: ["自己","可以放一些","搜索数据"],
    };
  },

加载页面后要渲染历史列表:

mounted() {
    
    if (localStorage.historyItems) {
    
      this.searchHistoryList = JSON.parse(localStorage.getItem("historyItems"));
    }
  },

method方法实现:
首先是搜索框的一个搜索操作,每进行一次搜索操作都要进行一次最近搜索的写入。
建议再搜索框的数据模型设为:

<input v-model.trim="msg"> 过滤前后空格
    //search监听事件
   onSearch(val) {
    
      //判断搜索值,空则提示不进行操作
      if (val !== null && val !== "") {
    
        this.appendKeywords(val);
        /**自己的搜索功能实现 */
      } else {
    
        Toast.fail("不可空搜索");
      }
    },

添加最近搜索关键字:
1)已有的关键词,删除原有的关键词,再进行新增操作。
2)新增的关键词,若超出10个则删除最后一个。
3)添加到缓存localstorage中。

appendKeywords(value) {
    
      /**
       * 1.已经有的关键词将历史的删除
       * 2.添加到数组的首位,若超出10个则删除最后一个
       * 3.添加到缓存
       */
      if (
        // 过滤一个结果的空记录添加,如果历史搜索为空则直接添加
        this.searchHistoryList !== null &&
        this.searchHistoryList !== undefined &&
        this.searchHistoryList.length > 0
      ) {
    
          //检查是否有重复值,有则删除
        this.searchHistoryList.forEach((element, index) => {
    
          if (element === value) {
    
            this.searchHistoryList.splice(index, 1);
          }
        });
        // 添加
        // 长度判断
        if (this.searchHistoryList.length >= 10) {
    
          this.searchHistoryList.unshift(value);
          this.searchHistoryList.pop();
        } else {
    
          this.searchHistoryList.unshift(value);
        }
        localStorage.setItem(
          "historyItems",
          JSON.stringify(this.searchHistoryList)
        );
      } else {
    
        this.searchHistoryList = [];
        this.searchHistoryList.push(value);
        localStorage.setItem(
          "historyItems",
          JSON.stringify(this.searchHistoryList)
        );
      }
    },

清除历史记录按钮功能实现:

// 清空历史记录
    clearHistoryItems() {
    
      localStorage.removeItem("historyItems");
      this.searchHistoryList = [];
    },
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43185419/article/details/119889234

智能推荐

安卓Kotlin开发系列之简单按钮的实现_kotlin 按钮-程序员宅基地

文章浏览阅读2.8k次。步骤一、拖控件首先你在主页面,把TextView添加到主页面,添加后,会有一个红色感叹号,分别拖按钮的四条边中间的四个点到页面边,将其处于如下状态。然后再把button拖进去,重复上面的步骤即可。拖入button如下图所示 如果出现黄色警告,可以点击黄色警告后,点击下面出现的问题,按fix,为按钮添加Resource_name名字后确认即可消除。..._kotlin 按钮

高频前端面试题汇总之Vue篇_高级前端面试题 vue-程序员宅基地

文章浏览阅读549次,点赞5次,收藏6次。可以。v-model 实际上是一个语法糖,如:实际上相当于:_高级前端面试题 vue

nrf52840学习心得(一)_nrf52840 添加自定义服务-程序员宅基地

文章浏览阅读519次。nrf52840调试中遇到的服务增加特征(characteristic)超过一定数量就会报错问题,解决办法是修改NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE的大小。_nrf52840 添加自定义服务

nginx反向代理,request.getServerName()的问题_nginx request.getservername()-程序员宅基地

文章浏览阅读2.6k次。前几天配置了nginx的反向代理。可是有个问题。 在项目中,写request.getServerName()的时候,总是返回的127.0.0.1 这个地址。折腾的好久,今天搜了搜,发现是配置的原因, 记载一下。我以前的配置:[html] view plain copy location / { proxy_pass http://127.0.0.1:18..._nginx request.getservername()

如何使用Unity制作虚拟导览(一)_unity 商场导览程序-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏12次。Unity用来制作游戏已经是目前市场上的一个发展趋势,而且有越来越多的公司与开发者不断的加入,那么Unity的应用是否能涵盖到各种领域?如果使用Unity制作建筑景观模拟?没错,这已是一个新时代的潮流,许多设计院的老板们发现,如果还是用效果图与一段动画展示已经很难满足客户的需求了,而公司内部现有的CAD软件与3dsmax能否与Unity完美搭配?是否需要其他的投入?我们来看看现在设计院的情_unity 商场导览程序

c# async await-程序员宅基地

文章浏览阅读8.1k次,点赞6次,收藏14次。本篇博客来谈一下我对c#中的async和awaite关键字的理解。先来聊聊我在理解这个异步编程机制时的困惑吧。 我看了[使用 Async 和 Await 的异步编程(C# 和 Visual Basic)]这篇文章后,感觉so easy,异步方法返回一个Task对象,凭着我对Task类的“深入理解”,我就断定:当调用一个同步方法时,由于同步方法返回的是Task,.net自动就让这个ta

随便推点

NOIP提高组历届真题(1997~2018)_noi1998提高组题目-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏7次。上次发了NOIP普及组真题,这次发一波提高组。还是有些难度的先上快捷查看键:第一页第二页第三页上具体题目,难度,以及年份P1003 铺地毯 NOIp提高组 2011 普及-P1005 矩阵取数游戏 NOIp提高组 2007 提高+/省选-P1006 传纸条 NOIp提高组 2008 高性能 普及+/提高P1011 车站 NOIp提高组 1998 普及-P1012 拼数 NOIp..._noi1998提高组题目

美国在线计算机硕士项目,优弗留学美国留学计算机硕士学校分析-程序员宅基地

文章浏览阅读185次。今天优弗留学小编想给大家分享的是关于美国留学读计算机硕士学校的难度分析,有想要去美国留学读计算机硕士的同学有没有对相关的院校有一个大概的了解呢?话不赘述,有需要的同学赶快和优弗留学小编一起来了解一下吧!一、难度五颗星1. Princeton University普林斯顿大学的计算机系申请时只能申请M.S.E. ,M.S.E.是两年的项目,需要完成论文。但研一下学期,可以申请转到Master of ...

用python做一个数据查询软件_GitHub - lepfinder/dbmaster: 一个python实现的online SQL 查询器...-程序员宅基地

文章浏览阅读810次。介绍dbmaster是一个python编写的在线数据库查询客户端,可以有效隔离线上数据库环境,提供了一系列便于开发者使用的特性。操作体验尽量兼容navcat。github地址:https://github.com/lepfinder/dbmaster特性支持SQL语法高亮和自动提示支持SQL格式化支持执行选中的SQL片段支持数据库SCHEMA显示和表结构信息(双击表名显示表结构信息)支持快捷键执行..._dbmaster

利用Vultr主机安转宝塔Web面板搭建wordpress博客建站教程_vulrt 安装宝塔面板-程序员宅基地

文章浏览阅读924次。本篇文章是针对新手个人站长,来教大家利用Vultr主机如何安装宝塔Web面板搭建wordpress博客的方法。1、一台Vultr VPS主机,如果没有的可以购买(vultr官网),现在Vultr有活动,新用户注册送100美元,参考《Vultr优惠码汇总 Vultr优惠充值活动更新》。2、注册Vultr账号创建VPS实例创建VPS实例点击Deploy Now创建服务器实例,Status显示Running表示已经成功安装,一版需要等5-10分钟。IP Address:XX.XX.XXX.XXXU_vulrt 安装宝塔面板

日志文件分析_日志分析-程序员宅基地

文章浏览阅读818次,点赞2次,收藏3次。8.在test2这台服务器查看test1的/var/log/ssg.log日志。_日志分析

OpenCV 2.4.8组件结构全解析_opencv2.4 build结构-程序员宅基地

文章浏览阅读501次。之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二篇。 至于OpenCV组件结构的研究方法,我们不妨管中窥豹,通过opencv安装路径下include目录里面头文件的分类存放,来一窥OpenCV这些年迅猛发展起来的庞杂组件架构。_opencv2.4 build结构