首頁  >  文章  >  web前端  >  vue怎麼實現搜尋紀錄

vue怎麼實現搜尋紀錄

PHPz
PHPz原創
2023-04-18 14:08:501874瀏覽

在今天的科技快速發展的時代,搜尋已經成為我們日常生活中不可或缺的功能。在搜尋引擎的背後,往往隱藏著一個又一個用戶的搜尋歷史,以便於用戶更好地管理自己的搜尋記錄,更快找到需要的資訊。在本文中,我們將介紹如何用Vue實現搜尋歷史的功能。

一、前知識

在開始之前,我們需要掌握一定的Vue知識,當然對於初學者而言,這篇文章也是一個很好的實作專案。

具體來說,我們需要知道如何使用Vue元件、如何使用Vuex狀態管理函式庫以及如何使用localStorage等基本概念和方法。

二、項目描述

我們將要實現的搜尋歷史功能,主要包括以下三個面向的實作:

1、輸入框搜尋功能:在輸入框中輸入關鍵字後,點擊搜尋按鈕後能夠進行搜尋。

2、搜尋記錄功能:將使用者進行過的搜尋記錄儲存在localStorage中,以便於使用者下次搜尋時能夠快速找到歷史記錄。

3、歷史記錄管理功能:使用者可以操作歷史記錄,例如清空歷史記錄、刪除某一筆歷史記錄等。

三、專案實作

1、建立Vue元件

我們先建立一個Search元件,負責實作搜尋歷史功能的具體實作。

<template>
    <div>
        <input type="text" v-model="keyword">
        <button @click="handleSearch">搜索</button>
        <ul>
            <li v-for="(item, index) in searchHistory" :key="index">
                {{item}}
                <span @click="handleDelete(index)">删除</span>
            </li>
        </ul>
        <button @click="handleClear">清空</button>
    </div>
</template>

這裡我們包含了一個輸入框、一個搜尋按鈕、一個展示歷史記錄的清單。其中,v-model指令用於實現雙向資料綁定,綁定輸入框中的關鍵字keyword;v-for指令用於循環展示歷史記錄清單。

2、建立Vuex狀態管理

Vuex可以理解為全域的狀態管理機制,當需要在多個元件之間進行資料通訊時,我們可以使用Vuex來實現。在這裡,我們需要使用Vuex來實現對於搜尋歷史記錄的保存和更新。

//store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
    state: {
        searchHistory: []
    },
    mutations: {
        addSearchHistory(state, keyword) {
            if (!state.searchHistory.includes(keyword)) {
                state.searchHistory.push(keyword)
                localStorage.setItem('searchHistory', JSON.stringify(state.searchHistory))
            }
        },
        clearSearchHistory(state) {
            state.searchHistory = []
            localStorage.removeItem('searchHistory')
        },
        deleteSearchHistory(state, index) {
            state.searchHistory.splice(index, 1)
            localStorage.setItem('searchHistory', JSON.stringify(state.searchHistory))
        },
        initSearchHistory(state) {
            state.searchHistory = JSON.parse(localStorage.getItem('searchHistory') || '[]')
        }
    },
    getters: {
        searchHistory(state) {
            return state.searchHistory
        }
    }
})

在store.js檔案中,我們定義了Vuex狀態管理的相關內容。在state中,我們定義了搜尋歷史數組searchHistory,在mutations裡定義了對於該數組的增添、刪除、清空等操作,同時也對其進行了對於localStorage的操作。其中的initSearchHistory用於初始化該數組,當瀏覽器中存在歷史記錄時,應該在建立元件之前進行初始化。

3、頁面的實作

接下來,我們需要將Search元件和Vuex狀態管理連結起來,使得其具備對應的功能。在此,我們需要關注組件的methods部分。

<script>
import {mapActions, mapGetters} from 'vuex'

export default {
    name: 'Search',
    data() {
        return {
            keyword: ''
        }
    },
    computed: mapGetters({
        searchHistory: 'searchHistory'
    }),
    methods: {
        ...mapActions([
            'addSearchHistory',
            'clearSearchHistory',
            'deleteSearchHistory',
            'initSearchHistory'
        ]),
        handleSearch() {
            if (this.keyword) {
                this.addSearchHistory(this.keyword)
                // do search
            }
        },
        handleClear() {
            this.clearSearchHistory()
        },
        handleDelete(index) {
            this.deleteSearchHistory(index)
        }
    },
    created() {
        this.initSearchHistory()
    }
}
</script>

在methods部分,我們首先透過mapGetters將searchHistory對應到元件中。接著,我們透過mapActions將Vuex狀態中的對應操作映射到元件中,這裡包含了我們先前定義過的增添、刪除、清空和初始化操作。在具體的實作中,我們需要在點擊搜尋按鈕時將輸入框中的關鍵字加到搜尋紀錄中,同時進行搜尋。

四、總結

在上述操作的基礎上,我們已經可以實現搜尋歷史的功能了。本文實現了關鍵字的搜尋功能、歷史記錄的保存和更新以及歷史記錄的管理功能。透過這個小專案的學習,我們可以更掌握Vue元件、Vuex狀態管理函式庫以及localStorage的操作方法。

其他值得提醒的一點是,對於一些複雜的應用程序,LocalStorage可能不是一個好的選擇,因為它只能存儲字符串類型,可能會造成類型的混亂;同時在相對複雜的用例下,Vuex也需要相應的最佳化策略,以提高效能。在使用中,我們需要靈活選擇合適的方法以滿足前端開發的需求。

以上是vue怎麼實現搜尋紀錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn