最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Vue3+Vant組件實(shí)現(xiàn)App搜索歷史記錄功能(示例代碼)

 更新時(shí)間:2021年06月09日 16:55:18   作者:L_不覺(jué)曉曉  
最近接了個(gè)項(xiàng)目需要開(kāi)發(fā)一個(gè)app項(xiàng)目,由于是第一次接觸這種app開(kāi)發(fā),經(jīng)過(guò)一番思考,決定使用Vue3+Vant前端組件的模式進(jìn)行開(kāi)發(fā),下面把問(wèn)題分析及實(shí)現(xiàn)代碼分享給大家,需要的朋友參考下吧

最近在開(kāi)發(fā)一款新的app項(xiàng)目,我自己也是第一次接觸app開(kāi)發(fā),經(jīng)過(guò)團(tuán)隊(duì)的一段時(shí)間研究調(diào)查,決定使用Vue3+Vant前端組件的模式進(jìn)行開(kāi)發(fā),vue2開(kāi)發(fā)我們已經(jīng)用過(guò)幾個(gè)項(xiàng)目了,所以決定這一次嘗試使用Vue3來(lái)進(jìn)行前段開(kāi)發(fā)。
我剛開(kāi)始負(fù)責(zé)搜索功能的開(kāi)發(fā),有歷史搜索記錄的需求,一開(kāi)始我認(rèn)為這是記錄的存儲(chǔ)信息也會(huì)放在一個(gè)數(shù)據(jù)庫(kù)表里面,但經(jīng)過(guò)一番調(diào)查,發(fā)現(xiàn)并不是這樣,而是要存儲(chǔ)在本地。但是網(wǎng)上的方法也并沒(méi)有完全解決問(wèn)題,經(jīng)過(guò)一番嘗試,終于給搞好了,話(huà)不多說(shuō),直接上效果圖。
初始化不顯示歷史搜索記錄

初始化bu不顯示歷史搜索記錄

回車(chē)搜索進(jìn)入詳情頁(yè)面

回車(chē)搜索進(jìn)入詳情頁(yè)面

歷史記錄頁(yè)面

回車(chē)搜索將歷史記錄信息加載出來(lái)

清除歷史記錄

清除歷史記錄

首先創(chuàng)建一個(gè)js文件
這個(gè)js文件主要包括了增加歷史記錄信息,刪除所有歷史記錄信息的功能

export default {

  // 添加搜索首頁(yè)歷史查詢(xún)記錄
  addSearchHistory(state, payload) {
    // list中包含該記錄的時(shí),刪除
    const index = state.searchHistoryList.indexOf(payload);
    if (index > -1) {
      state.searchHistoryList.splice(index, 1);
    }
    state.searchHistoryList.unshift(payload);
    // 歷史記錄中最大記20個(gè)記錄
    const count = state.searchHistoryList.length;
    state.searchHistoryList.splice(20, count);
  },

  // 清除搜索首頁(yè)歷史查詢(xún)記錄
  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: '', // 搜索關(guān)鍵字
      placeholderValue: '搜索產(chǎn)品/資訊/標(biāo)準(zhǔn)/成分/企業(yè)',
      historyList: [], // 歷史搜索數(shù)據(jù)
    });


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

    // 清除歷史記錄
    const delHostClick = async () => {
      Dialog.confirm({
        message: '確定要?jiǎng)h除歷史搜索嗎?',
      }).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代碼直接粘貼復(fù)制的話(huà)可能沒(méi)法直接用,因?yàn)檫@里面有好多業(yè)務(wù)代碼已經(jīng)刪除,留下的主要是歷史搜索記錄的代碼。主要有三個(gè)重點(diǎn):

引入useStore

import { useStore } from 'vuex';

const store = useStore();

初始化檢索歷史搜索記錄

// 初始化獲取歷史搜索記錄信息
	// 每次加載這和頁(yè)面都會(huì)首先調(diào)用這個(gè)方法,來(lái)取最新的信息
    onMounted(async () => {
      // 獲取歷史搜索信息
      state.historyList = store.state.searchHistoryList;
      // 判斷初始化是否顯示歷史搜索
      if (state.historyList.length > 0) {
        state.isShowHistory = true;
      } else {
        state.isShowHistory = false;
      }
    })

搜索框觸發(fā)搜索事件將搜索信息存放在Store中

// 子組件發(fā)射一個(gè)事件,父組件調(diào)用
    const searchClick = (val) => {
    	// 將搜索值放入歷史記錄中	
      store.commit('addSearchHistory', val);
      // 路由跳轉(zhuǎn)可以忽略
      // router.push({ path: '/search-detail', query: { searchVal: val } });
    };

清空歷史記錄

// 清除歷史記錄
    const delHostClick = async () => {
      Dialog.confirm({
        message: '確定要?jiǎng)h除歷史搜索嗎?',
      }).then(() => {
      	// 清空歷史記錄信息
        store.commit('clearSearchHistory', store);
        state.isShowHistory = false;
        Toast({
          message: '刪除成功',
          position: 'bottom',
        });
      });
    };

以上就是使用Vue3+Vant組件實(shí)現(xiàn)App搜索歷史記錄功能的詳細(xì)內(nèi)容,更多關(guān)于vue 搜索歷史記錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue3整合WangEditor富文本編輯器的實(shí)踐指南

    Vue3整合WangEditor富文本編輯器的實(shí)踐指南

    這篇文章主要為大家詳細(xì)介紹了如何在?Vue?3?項(xiàng)目中集成?WangEditor?富文本編輯器,實(shí)現(xiàn)圖文混排、自定義擴(kuò)展等高階功能,感興趣的小伙伴可以了解下
    2025-03-03
  • vue-router中query取值的坑及解決

    vue-router中query取值的坑及解決

    這篇文章主要介紹了vue-router中query取值的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 淺析從vue源碼看觀察者模式

    淺析從vue源碼看觀察者模式

    本篇文章主要介紹了vue源碼看觀察者模式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 基于vue和react的spa進(jìn)行按需加載的實(shí)現(xiàn)方法

    基于vue和react的spa進(jìn)行按需加載的實(shí)現(xiàn)方法

    這篇文章主要介紹了基于vue和react的spa進(jìn)行按需加載,需要的朋友可以參考下
    2018-09-09
  • vue項(xiàng)目中使用pinyin轉(zhuǎn)換插件方式

    vue項(xiàng)目中使用pinyin轉(zhuǎn)換插件方式

    這篇文章主要介紹了vue項(xiàng)目中使用pinyin轉(zhuǎn)換插件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue 之 .sync 修飾符示例詳解

    vue 之 .sync 修飾符示例詳解

    這篇文章主要介紹了vue 之 .sync 修飾符的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-04-04
  • 基于Vue3實(shí)現(xiàn)數(shù)字華容道游戲的示例代碼

    基于Vue3實(shí)現(xiàn)數(shù)字華容道游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Vue編寫(xiě)一個(gè)數(shù)字華容道游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue + axios get下載文件功能

    vue + axios get下載文件功能

    這篇文章主要為大家詳細(xì)介紹了vue + axios get下載文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 解決vue3中使用echart報(bào)錯(cuò):Cannot read properties of undefined (reading ‘type‘)

    解決vue3中使用echart報(bào)錯(cuò):Cannot read properties of&n

    在Vue項(xiàng)目中使用Echarts進(jìn)行數(shù)據(jù)可視化是非常常見(jiàn)的需求,然而有時(shí)候在引入Echarts的過(guò)程中可能會(huì)遇到報(bào)錯(cuò),本文主要介紹了解決vue3中使用echart報(bào)錯(cuò):Cannot read properties of undefined (reading ‘type‘),感興趣的可以了解一下
    2024-01-01
  • Vue中的情侶屬性$dispatch和$broadcast詳解

    Vue中的情侶屬性$dispatch和$broadcast詳解

    這篇文章主要給大家介紹了關(guān)于Vue中情侶屬性$dispatch和$broadcast的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

乐昌市| 德昌县| 五台县| 阳新县| 桐庐县| 孟连| 巧家县| 黔江区| 杭锦后旗| 隆安县| 武安市| 镶黄旗| 咸宁市| 霍城县| 项城市| 宁晋县| 庄河市| 广德县| 宜阳县| 鱼台县| 红河县| 和田县| 饶河县| 深州市| 辉县市| 厦门市| SHOW| 宁国市| 阜新市| 隆尧县| 古浪县| 三台县| 长兴县| 西宁市| 彰化县| 林周县| 苏州市| 卓尼县| 松滋市| 汉中市| 宁都县|