Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を行った結果、開発には Vue3+Vant フロントエンドコンポーネントモデルを使用することにしました。これまでいくつかのプロジェクトで Vue2 を使用してきましたが、今回はフロントエンド開発に Vue3 を使用してみることにしました。
検索機能の開発を担当するようになったばかりで、履歴検索レコードの要望がありました。当初、このレコードの保存情報もデータベースのテーブルに置かれると思っていたのですが、調べてみるとそうではなく、ローカルに保存する必要があることがわかりました。しかし、インターネット上の方法では問題は完全には解決しませんでした。何度か試した後、ようやく解決できました。さっそく、結果をお伝えします。
検索履歴の表示を初期化する

buを初期化し、過去の検索記録を表示しない

Enterキーを押して検索し、詳細ページに入ります

Enterキーを押して検索し、詳細ページに入ります

履歴ページ

Enter キーを押して、履歴情報を検索して読み込みます。

履歴をクリア

履歴をクリア

まず、js ファイルを作成します。この js ファイルには、主に履歴情報の追加とすべての履歴情報の削除の機能が含まれています。

エクスポートデフォルト{

  // 検索ホームページ履歴クエリレコードを追加する addSearchHistory(state, payload) {
    // リストにレコードが含まれている場合は削除します const index = state.searchHistoryList.indexOf(payload);
    (インデックス>-1)の場合{
      state.searchHistoryList.splice(インデックス、1);
    }
    state.searchHistoryList.unshift(ペイロード);
    // 履歴レコードの最大数は 20 です。const count = state.searchHistoryList.length;
    state.searchHistoryList.splice(20, カウント);
  },

  // ホームページの検索履歴をクリアする clearSearchHistory(state) {
    状態.searchHistoryList = [];
  },
};

Vue コードブロック

<テンプレート>
  <!-- 検索ボックス -->
  <検索バー
    @searchClick="検索クリック"
    :placeholderValue="state.placeholderValue"
    :searchVal="state.searchVal">
  </検索バー>
  <div class="検索">

    <!-- 検索履歴 -->
    <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" >
        <バンボタン
          ラウンド
          サイズ="小"
          @click="searchValClick(アイテム)"
          >{{ アイテム }}
        </バンボタン>
      </span>
      </div>
    </div>
  </div>
</テンプレート>

<スクリプト>
輸入 {
  マウント済み、
  反応的、
  現在のインスタンスを取得、
} から 'vue';
'vant' から { Toast, Dialog } をインポートします。
'@/components/SearchBar.vue' から searchBar をインポートします。
'vue-router' から useRouter をインポートします。
'vuex' から useStore をインポートします。

エクスポートデフォルト{

  コンポーネント:
    検索バー、
  },

  設定() {
    定数ルーター = useRouter();
    定数ストア = useStore();
    const { プロキシ } = getCurrentInstance();
    定数状態 = リアクティブ({
      isShowHistory: '', // 履歴を表示するかどうか searchVal: '', // 検索キーワード placeholderValue: '商品/情報/規格/原材料/企業を検索',
      historyList: [], // 履歴検索データ});


    // 検索するには入力してください const searchClick = (val) => {
      store.commit('addSearchHistory', val);
      // router.push({ path: '/search-detail', query: { searchVal: val } });
    };

    // 履歴をクリア const delHostClick = async () => {
      ダイアログ.確認({
        メッセージ: 「検索履歴を削除してもよろしいですか?」 '、
      }).then(() => {
        store.commit('clearSearchHistory', store);
        状態.isShowHistory = false;
        トースト({
          メッセージ: '正常に削除されました'、
          位置: '下'、
        });
      });
    };
	
	// 履歴検索レコード情報を初期化して取得する onMounted(async () => {
      // 履歴検索情報を取得します。state.historyList = store.state.searchHistoryList;
      // 表示履歴検索を初期化するかどうかを決定します if (state.historyList.length > 0) {
        状態.isShowHistory = true;
      } それ以外 {
        状態.isShowHistory = false;
      }
    });

    戻る {
      州、
      検索クリック、
      delHostクリック、
    };
  },
};
</スクリプト>

<style lang="less" スコープ>
</スタイル>

Vue コードを直接コピーして貼り付けると、多くの業務コードが削除され、残っているのは主に履歴検索レコードのコードであるため、直接使用できない可能性があります。主な焦点は3つあります。

useStoreのご紹介

'vuex' から useStore をインポートします。

定数ストア = useStore();

検索履歴を初期化する

// 履歴検索レコード情報を初期化して取得します // このページが読み込まれるたびに、このメソッドが最初に呼び出され、最新情報が取得されます onMounted(async () => {
      // 履歴検索情報を取得します。state.historyList = store.state.searchHistoryList;
      // 表示履歴検索を初期化するかどうかを決定します if (state.historyList.length > 0) {
        状態.isShowHistory = true;
      } それ以外 {
        状態.isShowHistory = false;
      }
    })

検索ボックスは検索イベントをトリガーし、検索情報をストアに保存します。

// 子コンポーネントがイベントを発行し、親コンポーネントが呼び出します const searchClick = (val) => {
    	// 検索値を履歴に保存する	
      store.commit('addSearchHistory', val);
      // ルートのリダイレクトは無視できます // router.push({ path: '/search-detail', query: { searchVal: val } });
    };

履歴をクリア

// 履歴をクリア const delHostClick = async () => {
      ダイアログ.確認({
        メッセージ: 「検索履歴を削除してもよろしいですか?」 '、
      }).then(() => {
      	// 履歴をクリアする情報store.commit('clearSearchHistory', store);
        状態.isShowHistory = false;
        トースト({
          メッセージ: '正常に削除されました'、
          位置: '下'、
        });
      });
    };

上記は、Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する詳細です。Vue検索履歴の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vueナンバープレート入力コンポーネントの使い方の詳しい説明
  • Vue elementuiは、検索バーのパブリックコンポーネントのカプセル化のサンプルコードを実装します。
  • Vue2.x の一般的な条件検索コンポーネントのカプセル化と適用の詳細な説明
  • Vue コンポーネントの練習検索可能なドロップダウン ボックス機能
  • Vue ドロップダウン メニュー コンポーネントの実装コード (検索を含む)
  • Vue.js プロジェクトの el-input コンポーネントは Enter キーをリッスンして検索機能を実装する例
  • Vue ベースの検索可能なドロップダウン ボックスのカスタム コンポーネントを実装する
  • Vueコンポーネントは検索可能なドロップダウンボックス拡張を実装します
  • Vue2.0 マルチ条件検索コンポーネントの使い方の詳しい説明
  • Vueナンバープレート検索コンポーネントの使い方の詳しい説明

<<:  MySQL SHOW PROCESSLISTはトラブルシューティングの全プロセスを支援します

>>:  VMware 15.5 バージョンのインストール Windows_Server_2008_R2 システム チュートリアル図

推薦する

3Dカルーセル効果を実現するjs

この記事では、3Dカルーセル効果をjsで実装するための具体的なコードを参考までに共有します。具体的な...

Linux のファイル システム タイプの表示方法の例

Linux でパーティションのファイル システム タイプを確認する方法。パーティションのファイル シ...

iptables および firewalld ツールを使用して Linux ファイアウォール接続ルールを管理する

ファイアウォールファイアウォールは一連のルールです。パケットが保護されたネットワーク空間に出入りする...

MySQLでデータベースのインストールパスを表示する方法

mysql コマンドを使用して、mysql のインストール パスを表示できます。 # 次の 2 つの...

CSS はモバイル互換性の問題を解決するために 0.5px の線を実装します (推奨)

【コンテンツ】: 1.背景画像のグラデーションスタイルを使用する2. スケールを使ってズームできる...

CSSは、入力ボックスのフローティングテキスト効果を実現するために、placeholder-shown疑似クラスを使用します。

この記事では、:placeholder-shown 疑似クラスを使用して、純粋な CSS で浮動疑問...

Element UI を使用してページにページング ナビゲーション バーを追加する方法

必要ページング バーを追加します。これにより、ページにジャンプしたり、ページ番号に従って特定のページ...

MySQL DISTINCTの基本実装原理の詳細な説明

序文DISTINCT は、GROUP BY 操作の実装と非常によく似ていますが、GROUP BY の...

mysqlのデータディレクトリ内のファイルを直接コピーしてデータを復元する実装

mysqlはデータディレクトリ内のファイルをコピーしてデータを復元します背景: MySQL がクラッ...

HTML と埋め込み Flash の両方におけるスクロールバーの分析と処理

開発を行う際に、次のような状況に遭遇することがよくあります。 a.swf が Web ページに追加さ...

HTML/CSS の基礎 - HTML コード記述におけるいくつかの注意事項 (必読)

この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...

vscodeで保存した後のHTML自動フォーマットの問題を解決する

vsCode のバージョンは最近更新され、現在のバージョン番号は 1.43 です。実際、vsCode...

強くお勧めします! Vue 3.2 でシンタックスシュガーを設定する

目次前の1. セットアップ構文シュガーとは何か2. セットアップコンポーネントを使用して自動的に登録...

30分でReact Hooksを包括的に理解できます

目次概要1. 使用状態1.1 3つの概念に関する質問1.2 例1.3 注記2. リデューサーを使用す...

CentOS 6.4 MySQL 5.7.18 のインストールと設定方法のグラフィックチュートリアル

Centos6.4 で mysql5.7.18 をインストールするための具体的な手順が全員に共有され...