使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)


Posted in Vue.js onJune 09, 2021

最近在开发一款新的app项目,我自己也是第一次接触app开发,经过团队的一段时间研究调查,决定使用Vue3+Vant前端组件的模式进行开发,vue2开发我们已经用过几个项目了,所以决定这一次尝试使用Vue3来进行前段开发。
我刚开始负责搜索功能的开发,有历史搜索记录的需求,一开始我认为这是记录的存储信息也会放在一个数据库表里面,但经过一番调查,发现并不是这样,而是要存储在本地。但是网上的方法也并没有完全解决问题,经过一番尝试,终于给搞好了,话不多说,直接上效果图。
初始化不显示历史搜索记录

使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)

回车搜索进入详情页面

使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)

历史记录页面

使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)

清除历史记录

使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)

首先创建一个js文件
这个js文件主要包括了增加历史记录信息,删除所有历史记录信息的功能

export default {

  // 添加搜索首页历史查询记录
  addSearchHistory(state, payload) {
    // list中包含该记录的时,删除
    const index = state.searchHistoryList.indexOf(payload);
    if (index > -1) {
      state.searchHistoryList.splice(index, 1);
    }
    state.searchHistoryList.unshift(payload);
    // 历史记录中最大记20个记录
    const count = state.searchHistoryList.length;
    state.searchHistoryList.splice(20, count);
  },

  // 清除搜索首页历史查询记录
  clearSearchHistory(state) {
    state.searchHistoryList = [];
  },
};

Vue代码块

<template>
  <!-- 搜索框 -->
  <search-bar
    @searchClick="searchClick"
    :placeholderValue="state.placeholderValue"
    :searchVal="state.searchVal">
  </search-bar>
  <div class="search">

    <!-- 搜索历史 -->
    <div class="history" v-if="state.isShowHistory">
      <span class="proHot">搜索历史</span>
      <span class="delHotSearch" @click="delHostClick">清除历史</span>

      <!-- 存放历史记录信息 -->
      <div class="searchBtn-div">
        <span v-for="(item, index) in state.historyList" :key="index" class="searchValBtn" >
        <van-button
          round
          size="small"
          @click="searchValClick(item)"
          >{{ item }}
        </van-button>
      </span>
      </div>
    </div>
  </div>
</template>

<script>
import {
  onMounted,
  reactive,
  getCurrentInstance,
} from 'vue';
import { Toast, Dialog } from 'vant';
import searchBar from '@/components/SearchBar.vue';
import { useRouter } from 'vue-router';
import { useStore } from 'vuex';

export default {

  components: {
    searchBar,
  },

  setup() {
    const router = useRouter();
    const store = useStore();
    const { proxy } = getCurrentInstance();
    const state = reactive({
      isShowHistory: '', // 是否显示历史记录
      searchVal: '', // 搜索关键字
      placeholderValue: '搜索产品/资讯/标准/成分/企业',
      historyList: [], // 历史搜索数据
    });


    // 回车搜索
    const searchClick = (val) => {
      store.commit('addSearchHistory', val);
      // router.push({ path: '/search-detail', query: { searchVal: val } });
    };

    // 清除历史记录
    const delHostClick = async () => {
      Dialog.confirm({
        message: '确定要删除历史搜索吗?',
      }).then(() => {
        store.commit('clearSearchHistory', store);
        state.isShowHistory = false;
        Toast({
          message: '删除成功',
          position: 'bottom',
        });
      });
    };
	
	// 初始化获取历史搜索记录信息
    onMounted(async () => {
      // 获取历史搜索信息
      state.historyList = store.state.searchHistoryList;
      // 判断初始化是否显示历史搜索
      if (state.historyList.length > 0) {
        state.isShowHistory = true;
      } else {
        state.isShowHistory = false;
      }
    });

    return {
      state,
      searchClick,
      delHostClick,
    };
  },
};
</script>

<style lang="less" scoped>
</style>

Vue代码直接粘贴复制的话可能没法直接用,因为这里面有好多业务代码已经删除,留下的主要是历史搜索记录的代码。主要有三个重点:

引入useStore

import { useStore } from 'vuex';

const store = useStore();

初始化检索历史搜索记录

// 初始化获取历史搜索记录信息
	// 每次加载这和页面都会首先调用这个方法,来取最新的信息
    onMounted(async () => {
      // 获取历史搜索信息
      state.historyList = store.state.searchHistoryList;
      // 判断初始化是否显示历史搜索
      if (state.historyList.length > 0) {
        state.isShowHistory = true;
      } else {
        state.isShowHistory = false;
      }
    })

搜索框触发搜索事件将搜索信息存放在Store中

// 子组件发射一个事件,父组件调用
    const searchClick = (val) => {
    	// 将搜索值放入历史记录中	
      store.commit('addSearchHistory', val);
      // 路由跳转可以忽略
      // router.push({ path: '/search-detail', query: { searchVal: val } });
    };

清空历史记录

// 清除历史记录
    const delHostClick = async () => {
      Dialog.confirm({
        message: '确定要删除历史搜索吗?',
      }).then(() => {
      	// 清空历史记录信息
        store.commit('clearSearchHistory', store);
        state.isShowHistory = false;
        Toast({
          message: '删除成功',
          position: 'bottom',
        });
      });
    };

以上就是使用Vue3+Vant组件实现App搜索历史记录功能的详细内容,更多关于vue 搜索历史记录的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
Vue 的 v-model用法实例
Nov 23 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
Vue常用API、高级API的相关总结
Feb 02 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
详解Vue的options
May 15 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
vue+elementUI实现表格列的显示与隐藏
Apr 13 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 #Vue.js
Vue中插槽slot的使用方法与应用场景详析
vue+elementui 实现新增和修改共用一个弹框的完整代码
解决vue $http的get和post请求跨域问题
vue Element-ui表格实现树形结构表格
Jun 07 #Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 #Vue.js
vue响应式原理与双向数据的深入解析
You might like
多php服务器实现多session并发运行
2006/10/09 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
php实现的ping端口函数实例
2014/11/12 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
js控制框架刷新
2008/08/01 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python九九乘法表的实例
2017/09/26 Python
Python简单实现控制电脑的方法
2018/01/22 Python
使用python实现BLAST
2018/02/12 Python
基于python实现查询ip地址来源
2020/06/02 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
通息工程毕业生自荐信
2013/10/16 职场文书
师范毕业生自荐信
2013/10/17 职场文书
会计专业毕业生自我鉴定
2013/10/29 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
营业用房租赁协议书
2014/11/26 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
利用Python判断你的密码难度等级
2021/06/02 Python
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server