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 システム チュートリアル図

推薦する

Ubuntu16.04はphp5.6ウェブサーバー環境を構築します

Ubuntu 16.04 はデフォルトで PHP7.0 環境をインストールしますが、PHP7 は一部...

Vueコンポーネントの詳細な説明

<本文> <div id="ルート"> <h2&...

熟練デザイナーの7つの原則(1):フォントデザイン

まあ、あなたはデザインの達人かもしれませんし、あるいはそれは大げさすぎるかもしれませんが、少なくとも...

HTML ページジャンプコード

次のコードを index.html などのデフォルトのホームページ ファイルとして保存し、ルート デ...

JS 4つの楽しいハッカー背景効果コードを共有する

目次例1例2例3例4例1 <html> <ヘッド> <title>...

JavaScriptのループの違いについての詳細な説明

目次序文列挙可能なプロパティ反復可能なオブジェクトforEachメソッドとmapメソッドチェーン呼び...

Linux でディスクをマウントし、起動時に自動的にマウントするように設定する方法

皆さんの時間は貴重だと承知しているので、プロセス コマンドを直接書き留めておきます。設定できます。原...

MYSQL 文字列強制変換メソッドの例

序文2 つのテーブル内の同じフィールドの型が異なっていたり、エンコード タイプが異なっていたりするた...

MySQL の一般的な日付比較および計算関数

MySql での時間比較の実装unix_timestamp() unix_timestamp 関数は...

MySQLオンラインDDLの使用に関する詳細な説明

目次文章LOCKパラメータアルゴリズムパラメータCOPY TABLE プロセスIN-PLACEプロセ...

MySql5.7.21 インストールポイント記録メモ

ダウンロードしたバージョンは、Zip 解凍版、Windows システムです。長い間 Windows ...

MySQL シリーズ 11 ログ

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

ウェブページの右側に固定されたフローティングレイヤーの実装コード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

Centos 7.4 でリモート アクセス制御を実装する方法

1. SSHリモート管理SSH はセキュア チャネル プロトコルであり、主にリモート ログイン、リモ...

CSSアニメーション効果アニメーションの一般的なスタイル

アニメーションアニメーションを定義します。 /*アニメーションの各ステップで実行されるアクションを定...