目次
ページを作成します
NUXT構成に通知します
ページに記入します
{{product.name}}
{{product.price |ドル}}
ホームページ ウェブフロントエンド CSSチュートリアル NUXTアプリケーションで動的ルートを作成します

NUXTアプリケーションで動的ルートを作成します

Apr 18, 2025 am 10:53 AM

NUXTアプリケーションで動的ルートを作成します

この記事では、Netlifyに展開されたeコマースの例を介して、NUXTアプリケーションで動的ルーティングを作成する方法を示します。これは一般的なシナリオです。APIからデータを取得しますが、これは不明であり、いつでも多数または変更があります。幸いなことに、Nuxtは動的ルーティングを作成するプロセスを非常にスムーズにします。

始めましょう!

デモサイトGitHubリポジトリ

ページを作成します

この例では、Mockarooを使用していくつかの仮想ストアデータを作成し、静的フォルダーに保存しました。通常、VuexストアでFetchまたはAxiosとアクションを使用してこのデータを収集します。いずれにせよ、データをstore/index.jsにVuexを使用して保存します。これには、UIステータスと空のカート配列が含まれています。

 「〜/static/storedata.json」からデータをインポートする

const state =()=>({{
  cartuistatus:「アイドル」、
  保存された:データ、
  カート:[]
})
ログイン後にコピー

NUXTでは、ルートを設定するためにpagesディレクトリに.vueファイルを作成するだけであることに注意する必要があります。したがって、 index.vueページがホームページとして、ショッピングカートなどのcart.vueページがあります。NUXTは、これらのページのすべてのルートを自動的に生成します。

動的ルートを作成するには、これらのページを保存するディレクトリを作成します。この場合、ルートが各製品の詳細ビューを指すため/productsと呼ばれるディレクトリを作成しました。

このディレクトリでは、アンダースコアを備えたページと、ルートの作成に使用したいユニークな識別子を作成します。カート内のデータを見ると、次のようになります。

 [
  {
    「ID」:「9D436E98-1DC9-4F21-9587-76D4C0255E33」、
    「色」:「ゴールデンロッド」、
    「説明」:「Mauris Enim Leo、Rhoncus Sed、Vestibulum Sit Amet、Cursus ID、Turpis。IntegerAliquet、Massa Id Lobortis convallis、Tortor Riskus dapibus augue、Vel Accumsan Tellus nisi eu orci。
    「性別」:「男性」、
    「名前」:「デジアダ」、
    「レビュー」:「Productize Virtual Markets」、
    「星空」:3
    「価格」:50.40、
    「IMG」:「1.jpg」
  }、
  …
]
ログイン後にコピー

各エントリのIDが一意であることがわかりますので、これは良い候補の識別子であり、ページに名前を付けます。

_id.vue

これで、ルーティングパラメーターを使用して、特定のページのIDをデータに保存できます。

データ() {
  戻る {
    ID:this。$ route.params.id、
  }
}、
ログイン後にコピー

上記のエントリについては、devtoolsのデータを見ると、次のようになります。

 ID: "9D436E98-1DC9-4F21-9587-76D4C0255E33"
ログイン後にコピー

これを使用して、ストレージからこのエントリに関する他のすべての情報を取得できます。 mapStateを使用します:

 "vuex"から{mapstate}をインポートします。

計算:{
  ... MapState(["Storedata"])、
  製品() {
    this.storedata.find(el => el.id === this.id)を返します。
  }
}、
ログイン後にコピー

格納されているのは、一意のIDでエントリを見つけるためにstoredataています!

NUXT構成に通知します

YARNビルドを使用してアプリケーションを構築すると、完了ですが、NUXTを使用して、展開用の静的サイト、この場合はNetlifyで作成します。 Nuxtを使用して静的サイトを作成するとき、 yarn generateコマンドを使用します。 nuxt.config.jsgenerateコマンドを使用して、動的ファイルについてnuxtに知らせる必要があります。

このコマンドは、次のような配列に解析された約束を返す関数を期待します。

デフォルトのエクスポート{
  生成する: {
    ルート:[
      '/product/1'、
      '/product/2'、
      '/product/3'
    ]
  }
}
ログイン後にコピー

これを行うには、ファイルの上部に静的ディレクトリからデータを導入し、関数を作成します。

 './static/storedata.json'からデータをインポートする
let dynamicRoutes =()=> {
  新しい約束を返す(Resolve => {
    Resolve(data.map(el => `product/$ {el.id}`))
  })
}
ログイン後にコピー

次に、構成の関数を呼び出します。

生成する: {
  ルート:DynamicRoutes
}、
ログイン後にコピー

Axiosを使用してAPIからデータを収集する場合(より一般的です)、次のようになります。

 「axios」からaxiosをインポートする
let dynamicRoutes =()=> {
  return axios.get( 'https:// your-api-here/products').then(res => {
    RETURN RES.DATA.MAP(PRODUCT => `/PRODUCT/$ {PRODUCT.ID}`)
  })
}
ログイン後にコピー

このようにして、ダイナミックルーティングセットアップを完了しました!サーバーをシャットダウンして再起動すると、各製品の動的ルーティングが有効になります!

この記事の最後の部分では、ページの残りの部分がどのように作成され、プロジェクトをカートに追加する方法を説明し続けます。これはあなたも学びたいものかもしれません。

ページに記入します

これで、 productを計算したプロパティを介してすべての情報にアクセスできるため、必要なフォーマットをページに入力できます。

<main><img src="/static/imghw/default1.png" data-src="https://img.php.cn/" class="lazy" alt="NUXTアプリケーションで動的ルートを作成します"><h1 id="product-name"> {{product.name}}</h1>
  <h4 id="product-price-ドル">{{product.price |ドル}}</h4>
  <p>{{ 製品説明 }}</p>

 ...
</main>
ログイン後にコピー

この場合、保管中のカートにアイテムを追加する必要があります。アイテムを追加および削除する機能を追加します(ゼロ以下の数の削減を許可しません)

<p>
  <button> 0 ? quantity-- : quantity = 0"> - </button>
  {{ 量 }}
  <button> </button>
</p>
...
<button>カートに追加</button>
ログイン後にコピー

このコンポーネントの方法では、アイテムと新しいフィールド(数量)を配列に追加します。これは、ストアの変異にペイロードとして渡されます。

方法:{
  cartadd(){
    let item = this.product;
    item.quantity = this.quantity;
    this.tempcart.push(item);
    this。$ store.commit( "addtocart"、item);
  }
}
ログイン後にコピー

Vuexストレージでは、プロジェクトが既に存在するかどうかを確認します。それが存在する場合、数のみを増やします。存在しない場合は、数量を含むアイテム全体をカートアレイに追加します。

 addtocart :( state、payload)=> {
  itemfound = falseとします
  state.cart.foreach(el => {
    if(el.id === payload.id){
      el.quantity = payload.quantity
      itemfound = true
    }
  })
  if(!itemfound)state.cart.push(ペイロード)
}
ログイン後にコピー

ストレージ内のゲッターを使用して合計を計算できるようになりました。これは最終的にStripe ServerLess関数に渡されます(これについての別の投稿が近日公開されます!)。 Reduceは多くの値から値を取得するのに非常に優れているため、これを使用します。 (私はここに詳細を書きました。

 carttotal:state => {
  if(!state.cart.length)return 0
  return state.cart.reduce((ac、next)=> ac next.quantity * next.price、0)
}
ログイン後にコピー

デモサイトGitHubリポジトリ

それでおしまい!個々の製品ページをセットアップしており、Nuxtはビルド時にすべての個別のルートを生成します。あなたは間違いなく自分のためにnuxtを試してみたいと思うでしょう。 ?

以上がNUXTアプリケーションで動的ルートを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

それは&#039; Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

Redwood.jsと動物相を使用してイーサリアムアプリを構築します Redwood.jsと動物相を使用してイーサリアムアプリを構築します Mar 28, 2025 am 09:18 AM

最近のビットコインの価格が20k $ $ USDを超えており、最近30Kを破ったので、イーサリアムを作成するために深く掘り下げる価値があると思いました

ブラウザから有効なCSSプロパティ値を取得できますか? ブラウザから有効なCSSプロパティ値を取得できますか? Apr 02, 2025 pm 06:17 PM

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード 粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード Apr 03, 2025 am 10:30 AM

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。

CI/CDで少し CI/CDで少し Apr 02, 2025 pm 06:21 PM

「ウェブサイト」は「モバイルアプリ」よりも適していると言いますが、Max Lynchからのこのフレーミングが好きです。

レスポンシブデザインのブラウザを比較します レスポンシブデザインのブラウザを比較します Apr 02, 2025 pm 06:25 PM

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

WordPressブロックエディターでのマークダウンとローカリゼーションを使用します WordPressブロックエディターでのマークダウンとローカリゼーションを使用します Apr 02, 2025 am 04:27 AM

WordPressエディターでユーザーに直接ドキュメントを表示する必要がある場合、それを行うための最良の方法は何ですか?

フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? Apr 05, 2025 pm 05:51 PM

フレックスレイアウトの紫色のスラッシュ領域に関する質問フレックスレイアウトを使用すると、開発者ツールなどの混乱する現象に遭遇する可能性があります(D ...

See all articles