使用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 tags 创建缓存导航的过程实现
Dec 03 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 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笔试题
2009/08/04 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php中strtotime函数用法详解
2014/11/15 PHP
Web程序工作原理详解
2014/12/25 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Python多继承原理与用法示例
2018/08/23 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
Python数组并集交集补集代码实例
2020/02/18 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
初中班主任寄语
2014/04/04 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
教师个人师德总结
2015/02/06 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby