vue(iviewui) 输入框历史记录

news2024/11/19 20:20:43

安装:npm install good-storage -S

缓存cache.js:
 

/*把搜索的结果保存下来*/
/*用export把方法暴露出来*/
/*定义存储搜索的key _search_定义内部使用的key*/
let searches_list= []
const SEARCH_MAX_LENGTH=15
/*插入方法   arr存储的数据 val传入存储的值 compare前后比较的函数 maxlen存入的最大值*/
function insertArray(arr,val,compare,maxlen){
    //findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。
    const index=arr.findIndex(compare)
    if(index===0){ //数据为数组中的第一个数据 不做任何操作
        return
    }
    if(index>0){ //数组中有这条数据并且不再第一个位置
        arr.splice(index,1) //删掉这个数
    }
    arr.unshift(val);//把这条数据存储到数组中的第一个位置上
    if(maxlen && arr.length>maxlen){
        //如果有条数限制并且数组的个数大于限制数
        arr.pop() //方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值

    }
}
//开源storage的库,对localstorage和sessionstorage的封装
import storage from 'good-storage'
export function saveSearch(query,inputName){
    let searches=storage.get(inputName,[])
    /*逻辑是最后一次搜索的结果放到搜索历史的第一个*/
    insertArray(searches,query,(item)=>{
        return item===query //这是传入的一个比较函数 说明query在这个数组中
    },SEARCH_MAX_LENGTH)
    storage.set(inputName,searches)
    return searches
}

export function historySearch(query,inputName){
    if (query != "") {
        //搜索框不为空
        let searches=storage.get(inputName,[])
        /*逻辑是最后一次搜索的结果放到搜索历史的第一个*/
        insertArray(searches,query,(item)=>{
            return item===query //这是传入的一个比较函数 说明query在这个数组中
        },SEARCH_MAX_LENGTH)
        storage.set(inputName,searches)
    }
    //为避免重复先清空再添加
    searches_list = [];
    let searches = storage.get(inputName);
    searches_list = searches ? searches : [];
    return searches_list;
}

vue组件代码,将输入框放入iviewui框架用Poptip标签包裹

<template>
  <div class="container">
    <!-- form -->
    <div style="width: 100%">
      <Form ref="query" :model="query" :label-width="80" inline>
        <div style="float: left">
          <FormItem label="账号搜索">
            <Poptip trigger="focus" placement="bottom-start">
              <Input v-model="query.name" placeholder="用户ID(证件号)/手机号" clearable />
              <template #content>
                <ul>
                  <li v-for="(item,index) in searches_list" :key="index" @click="historySearchFocus(item)">{{item}}</li>
                  <li v-if="!historyQueryName">暂无历史记录!</li>
                  <Button v-if="historyQueryName" @click="clearHistory">清空历史</Button>
                </ul>
              </template>
            </Poptip>
          </FormItem>
          <FormItem :label-width="0">
            <Button type="primary" :loading="loading" @click="handleSubmit('query')">
              <span v-if="!loading">搜索</span>
              <span v-else>数据查询中</span>
            </Button>
          </FormItem>
        </div>
      </Form>
    </div>
  </div>
</template>

引入插件:

import {historySearch, saveSearch} from "@/store/cache";
import storage from "good-storage"; //引用本地存储js
添加变量:
searches_list: [], //历史搜索记录列表
historyQueryName: false,//历史记录是否存在

 查询调用方法中增加:

//历史缓存
this.searches_list = historySearch(this.query.name,"violations_queryName");//添加历史缓存
this.historyQueryName = this.searches_list.length>0;

不同的输入框改变自定义的key即可(当前是"violations_queryName")

添加input框聚焦和清空历史方法

historySearchFocus(item) {
  saveSearch(item,"violations_queryName");//把搜索的记录添加到good-storage中
  this.query.name = item;
},
//清空历史记录
clearHistory() {
  storage.remove("violations_queryName");
  this.searches_list = [];
  this.historyQueryName = false;
},

 

 效果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode-每日一题-1664-生成平衡数组的方案数(中等,动态规划)

时间长不做动态规划的题目&#xff0c;现在突然看过去有些生疏&#xff0c;第一眼看到这个题目想了一下暴力&#xff0c;然后突然注意到了题目的难度是中等&#xff0c;力扣里面的中等难度的题目都是没有暴力可以做出来的&#xff0c;目前我做这么多题来看的话&#xff0c;第一…

StarRocks荣获开源中国“2022 年度优秀开源技术团队”

近日&#xff0c;国内知名开源技术社区开源中国&#xff08;OSCHINA&#xff09;&#xff0c;综合了平台上各大认证官方技术团队、开源社区账号年度发表的内容频率及质量、开展各种活动运营积极性等多方面表现&#xff0c;向StarRocks颁发了 OSCHINA“2022年度优秀开源技术团队…

编译原理学习笔记19——语义分析和中间代码生成4

编译原理学习笔记19——语义分析和中间代码生成419.1 常用的控制语句19.2 控制语句的属性文法19.3 控制语句的属性计算19.4 一遍扫描翻译控制语句19.5 一遍扫描翻译控制语句示例19.1 常用的控制语句 常用的控制语句 S → if E then S1S → if E then S1 else S2S → while E …

机器学习笔记之生成对抗网络(二)全局最优解的求解逻辑

机器学习笔记之生成对抗网络——全局最优解的求解逻辑引言回顾&#xff1a;生成对抗网络的判别过程关于生成对抗网络的一些特性最优解的求解过程引言 上一节介绍了生成对抗网络&#xff0c;并介绍了其判别过程&#xff0c;本节将介绍关于模型参数的求解逻辑。 回顾&#xff1…

建立建筑领域科学的碳排放核算方法(江亿)

中国工程院院士、清华大学江亿教授受邀参加2022年12月28日“2022中国建筑节能协会年会暨第五届全国建筑节能与绿色建筑技术创新大会”并作了题为“建立建筑领域科学的碳排放核算方法”的报告。 实现能源转型&#xff0c;由碳基能源转为零碳能源&#xff0c;是中央确定的未来战…

九龙证券|锂离子电池在安全性能上应当满足哪些条件?

锂离子电池具有分量轻、容量大、无回忆效应等优势&#xff0c;因而得到了普遍运用——今朝的许多数码设备都采用了锂离子电池作电源&#xff0c;虽然其价格相对来说比较昂贵。锂离子电池的能量密度很高&#xff0c;它的容量是同分量的镍氢电池的1.5~2倍&#xff0c;而且具有很低…

Redis集群搭建

Redis集群搭建1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试基于CentOS7下的Redi…

数据库session分析表

目录 Active Session 活动会话 gv$active_session_history 每秒采集一次 dba_hist_active_sess_history 每10秒采集一次 背景 说明&#xff1a; 常用sql 直接使用V$ACTIVE_SESSION_HISTORY的sql 与其他表和视图共同查询…

神经网络数学原理与编码逻辑(一) 无隐层模型

概述 几年前就想写这篇文章&#xff0c;但是要上班应付各种工作内容&#xff0c;在解析神经网络的理论问题上也是断断续续&#xff0c;加上个人能力有限&#xff0c;很多问题并没有研究的很明白&#xff0c;以及神经网络本身高维问题的复杂性&#xff0c;导致这个问题的理解也…

OAuth2代码流程演示

目录 一&#xff0c;创建项目 二&#xff0c;项目结构 一&#xff0c;创建项目 新建项目时&#xff0c;如果换了工作区间我们一定要记得改maven地址&#xff0c;不然下载插件时不仅占用C盘内存&#xff0c;还会下载的很慢。 导入项目 导入新项目后就会下载新的插件&#xf…

消息队列简介

提高系统性能首先考虑的是数据库的优化&#xff0c;之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中&#xff0c;针对数据库需要注意的事项。但是数据库因为历史原因&#xff0c;横向扩展是一件非常复杂的工程&#xff0c;所有我们一般会尽量把流量都挡在数据库…

Unity可用 运行时语音合成(文本转语音)插件 RT-Voice PRO

Unity语音合成文本转语音插件 RT-Voice PRO前言一、导入RT-Voice PRO插件二、使用步骤1.先看自带例子&#xff08;01-Speech&#xff09;2.自行配置总结前言 提示&#xff1a;这个插件在Unity Asset Store 卖 78美刀,确实买不起啊。 &#x1f602; AssetStore下载链接 文章最后…

复试数据结构篇[第5章-第6章]

文章目录第五章 数组和广义表1-数组定义2-数组的顺序表示3-矩阵的压缩存储&#xff08;1&#xff09;对称矩阵和三角矩阵&#xff08;2&#xff09;对角矩阵&#xff08;3&#xff09;稀疏矩阵&#xff08;3&#xff09;十字链表4-广义表的定义串、数组、广义表小结第六章 树与…

JVM的类加载

什么是类加载&#xff1f;java程序运行前&#xff0c;要经过编译即.java>.class文件。运行的时候java进程(JVM)就会读取对应的.class文件&#xff0c;并解析内容&#xff0c;在内存中构造出类对象并进行初始化&#xff08;类对象就是描述这个类有哪些属性&#xff0c;哪些方…

基于卡尔曼滤波器的PID控制-3

基于卡尔曼滤波器的PID控制系统结构如图1所示。图1 基于卡尔曼滤波器的PID控制被控对象为二阶传递函数&#xff1a;离散化结果与“基于卡尔曼滤波器的PID控制-1”的仿真实例相同。采样时间为1ms。控制干扰信号w(k)和测量噪声信号v(k)幅值均为0.002的白噪声信号&#xff0c;输入…

Python中最全的窗口操作,如窗口最大化、最小化、窗口置顶、获取缩放比例等

Python窗口操作 前言 本文记录在Python中操作Windows应用窗口的操作。 这里的操作都是自己摸索借助强大的搜索引擎整理出来的&#xff0c;我真棒&#xff01;&#xff01;&#xff01; 知识点&#x1f4d6;&#x1f4d6; 名称解释名称ctypes****ctypesPython的外部函数库。它…

高阶导数——“高等数学”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是高阶导数&#xff0c;在这之前&#xff0c;我们学习了导数的概念和函数的求导法则&#xff0c;那么今天&#xff0c;就让我们一起进入高阶导数的世界吧 一、高阶导数的定义 二、高阶导数的计算 1.直接法 2.间…

儿童护眼台灯如何选择?2023年儿童护眼台灯推荐

随着科技不断发展&#xff0c;生活方式的改变&#xff0c;各类的电子产品的使用&#xff0c;加上不注意保护视力、过度用眼等&#xff0c;我国儿童青少年的近视率出现上升趋势&#xff0c;为了保护孩子们的健康&#xff0c;护眼台灯受到许多家庭的青睐&#xff0c;那么儿童的护…

[个人备忘]go包管理

版本 1.18创作目的: 之前想要在go的项目里引用另一个自己写的项目, 然后被折磨半天,乃至弃坑1,创建项目我们创建目录gogogo,下面有两个项目: 分别创建main.goutils/main.gopackage utils import "fmt" // 大写才能被外部访问 func Log(){fmt.Print("go mod is s…

Postman 实现备份数据 Postman恢复数据 postman 导出导入数据 postman 导入导出数据

Postman 实现备份数据 Postman恢复数据 postman 导出导入数据 postman 导入导出数据 一、需求描述 在使用postman调试接口时&#xff0c;若遇到内网的环境&#xff0c;无法通过账户同步数据&#xff1b; 在A电脑调试的接口数据&#xff0c;需要移动到B电脑上&#xff0c;如何实…