ホームページ ウェブフロントエンド Vue.js Vue を使用して JD.com のような検索ページを実装するにはどうすればよいですか?

Vue を使用して JD.com のような検索ページを実装するにはどうすればよいですか?

Jun 25, 2023 am 09:05 AM
vue 京東 検索ページ

Vue は現在最も人気のあるフロントエンド フレームワークの 1 つで、効率的で美しいユーザー インターフェイスを迅速に構築するのに役立ちます。この記事では、Vue を使用して JD.com 風の検索ページを実装する方法を紹介します。

まず、次のツールとテクノロジーを準備する必要があります:

  • Vue CLI: Vue プロジェクトを迅速に初期化するために使用されます。
  • axios: HTTP リクエストの送信と応答の処理に使用されます。
  • Vuex: アプリケーションの状態を管理するために使用されます。
  • 要素 UI: さまざまな UI コンポーネントを提供するために使用されます。
  1. Vue プロジェクトの初期化

Vue CLI を使用して新しいプロジェクトを初期化するのは非常に簡単で、コマンド ラインで次のコマンドを実行するだけです。

1

vue create jd-search

ログイン後にコピー

このコマンドは、現在のディレクトリに jd-search という名前のプロジェクトを作成し、必要な依存関係を自動的にインストールします。

  1. 要素 UI の追加

要素 UI のインストールは非常に簡単です。コマンド ラインで次のコマンドを実行するだけです。

1

npm install element-ui

ログイン後にコピー

インストールが完了したら、 main.js に要素 UI を導入します:

1

2

3

4

5

import Vue from 'vue'

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

 

Vue.use(ElementUI)

ログイン後にコピー
  1. 検索コンポーネントの作成

src/components に作成します。ディレクトリ Search.vue という名前のコンポーネント。このコンポーネントには、入力ボックスと検索ボタンが含まれています。コードは次のとおりです:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<template>

  <div class="search">

    <el-input

      v-model="keyword"

      placeholder="请输入关键词"

      class="search-input"

      @keyup.enter.native="search"

    />

    <el-button

      type="primary"

      icon="el-icon-search"

      class="search-btn"

      @click="search"

    />

  </div>

</template>

 

<script>

export default {

  data() {

    return {

      keyword: '',

    }

  },

  methods: {

    search() {

      this.$emit('search', this.keyword);

    }

  },

}

</script>

 

<style scoped>

.search {

  display: flex;

  flex-direction: row;

  align-items: center;

  justify-content: center;

}

 

.search-input {

  width: 500px;

  margin-right: 20px;

}

 

.search-btn {

  width: 80px;

}

</style>

ログイン後にコピー

このコンポーネントには、ユーザーが入力したキーワードを保存するために使用される keyword データ属性が含まれています。ユーザーが検索ボタンをクリックするか Enter キーを押すと、search メソッドがトリガーされ、現在の keyword 値がパラメーターとして親コンポーネントに渡されます。

  1. 製品リスト コンポーネントの作成

ProductList.vue という名前のコンポーネントを src/components ディレクトリに作成します。このコンポーネントは、検索結果の製品リストを表示します。コードは次のとおりです:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

<template>

  <div class="product-list">

    <el-card v-for="product in products" :key="product.id">

      <div slot="header" class="product-header">

        <h3>{{ product.title }}</h3>

        <span class="product-price">{{ product.price }}</span>

      </div>

      <div>

        <img :src="product.image" class="product-image" />

      </div>

      <div>

        {{ product.description }}

      </div>

    </el-card>

  </div>

</template>

 

<script>

export default {

  props: {

    products: {

      type: Array,

      default: () => [],

    },

  },

}

</script>

 

<style scoped>

.product-list {

  display: grid;

  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));

  grid-gap: 20px;

}

 

.product-header {

  display: flex;

  flex-direction: row;

  align-items: center;

  justify-content: space-between;

}

 

.product-price {

  font-size: 18px;

}

</style>

ログイン後にコピー

このコンポーネントは、検索結果の表示に使用される products という名前の属性を受け取ります。 Element UI の el-card コンポーネントと el-image コンポーネントを使用して製品リストを表示し、CSS グリッドを使用してアダプティブ レイアウトを実装します。

  1. 状態管理モジュールを作成する

Vuex を使用してアプリケーションの状態を管理すると非常に便利です。 src/store ディレクトリに search.js という名前のモジュールを作成します。このモジュールには、次の状態、操作、およびゲッターが含まれています。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

const state = {

  keyword: '',

  products: [],

};

 

const mutations = {

  updateKeyword(state, keyword) {

    state.keyword = keyword;

  },

  updateProducts(state, products) {

    state.products = products;

  },

};

 

const actions = {

  async search({ commit }, keyword) {

    const response = await this.$axios.get('/api/search', {

      params: { keyword },

    });

    commit('updateProducts', response.data);

  },

};

 

const getters = {};

 

export default {

  namespaced: true,

  state,

  mutations,

  actions,

  getters,

};

ログイン後にコピー

このモジュールには、検索リクエストの送信と検索結果の更新に使用される search という名前の非同期操作が含まれています。また、ユーザーが入力したキーワードと検索結果を保存するための、keyword という名前の状態と products という名前の状態も含まれています。

  1. 検索ページの作成

SearchPage.vue という名前のページを作成します。このページには、Search が含まれます。 ProductList コンポーネントを管理し、Vuex を通じてコン​​ポーネント間の対話を管理します。コードは次のとおりです。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<template>

  <div class="search-page">

    <search @search="search" />

    <product-list :products="products" />

  </div>

</template>

 

<script>

import Search from '@/components/Search';

import ProductList from '@/components/ProductList';

import { mapState, mapActions } from 'vuex';

 

export default {

  components: { Search, ProductList },

  computed: {

    ...mapState('search', ['products']),

  },

  methods: {

    ...mapActions('search', ['search']),

  },

}

</script>

 

<style scoped>

.search-page {

  display: flex;

  flex-direction: column;

  align-items: center;

  padding: 20px;

}

</style>

ログイン後にコピー

このページには Search コンポーネントと ProductList コンポーネントが含まれており、Vuex の mapStatemapActions## を使用します。 #products 属性と search 操作をマッピングします。ユーザーがキーワードを入力して検索ボタンをクリックするか Enter キーを押すと、search 操作がトリガーされ、検索結果がバックエンド API から取得され、products ステータスがバックエンド API から取得されます。 Vuexが更新されました。

    検索リクエストを送信

src/main.js で Axios を設定します。コードは次のとおりです:

1

2

3

4

5

6

import axios from 'axios'

import VueAxios from 'vue-axios'

 

Vue.use(VueAxios, axios)

 

axios.defaults.baseURL = 'http://localhost:3000'

ログイン後にコピー
Thisアプリケーションで

$axios オブジェクトを使用して HTTP リクエストを送信できます。これで、search アクションで検索リクエストを送信できるようになりました。

これまでに、JD.com 風の検索ページの実装が完了しました。このページでは、Vue、Element UI、Axios、Vuex などのテクノロジを使用し、最新のシングルページ アプリケーションのベスト プラクティスに従っています。

以上がVue を使用して JD.com のような検索ページを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JD.comは「ドアツードアの無料返品交換」貨物保険サービスをさらにアップグレードし、8月末までに本格的に開始する予定です JD.comは「ドアツードアの無料返品交換」貨物保険サービスをさらにアップグレードし、8月末までに本格的に開始する予定です Aug 14, 2024 am 10:09 AM

JD.comは「ドアツードアの無料返品交換」貨物保険サービスをさらにアップグレードし、8月末までに本格的に開始する予定です

vueでechartを使用する方法 vueでechartを使用する方法 May 09, 2024 pm 04:24 PM

vueでechartを使用する方法

vue におけるエクスポートのデフォルトの役割 vue におけるエクスポートのデフォルトの役割 May 09, 2024 pm 06:48 PM

vue におけるエクスポートのデフォルトの役割

vueでのmap関数の使い方 vueでのmap関数の使い方 May 09, 2024 pm 06:54 PM

vueでのmap関数の使い方

Vue における onmounted の役割 Vue における onmounted の役割 May 09, 2024 pm 02:51 PM

Vue における onmounted の役割

vueのエクスポートとデフォルトのエクスポートの違い vueのエクスポートとデフォルトのエクスポートの違い May 08, 2024 pm 05:27 PM

vueのエクスポートとデフォルトのエクスポートの違い

vue の onmounted は、react のどのライフサイクルに対応しますか vue の onmounted は、react のどのライフサイクルに対応しますか May 09, 2024 pm 01:42 PM

vue の onmounted は、react のどのライフサイクルに対応しますか

Vueのフックとは何ですか Vueのフックとは何ですか May 09, 2024 pm 06:33 PM

Vueのフックとは何ですか

See all articles