Vueルーティングコンポーネントでパラメータを渡す8つの方法の詳細な説明

Vueルーティングコンポーネントでパラメータを渡す8つの方法の詳細な説明

シングルページアプリケーションを開発する場合、特定のルートを入力し、パラメータに基づいてサーバーからデータを取得する必要がある場合があります。次に、ルートによって渡されたパラメータを最初に取得して、サーバー要求を完了する必要があります。したがって、ルートによってパラメータを渡すいくつかの方法を理解する必要があります。次の方法はvue-router@4と同じです。

プログラムによるルーティングパラメータ

<router-link>を使用してナビゲーション リンクを定義するタグを作成するだけでなく、router のインスタンス メソッドを使用してコードを記述して実装することもできます。

1. パラメータを渡す

ルーティング構成

パス パラメータはコロン:

定数ルート = [
 // 動的セクションはコロンで始まります { path: 'details/:id', name: "details", component: Details },
]

router.push()メソッドのパラメータには、文字列パス、またはアドレスを記述するオブジェクトを指定できます。

const ホーム = {
 テンプレート: '<div @click="toDetails">詳細へ</div>',
 方法:
  詳細() {
   // 文字列パス this.$router.push('/details/001')
   // パスを持つオブジェクト this.$router.push({path: '/details/001'})
   // ルートに名前を付けます。ルートを設定する場合、名前フィールドは必須です this.$router.push({ name: 'details', params: { id: '001' } })
  }
 }
}

pathが指定されている場合は、 paramsは無視されることに注意してください。

// `params` は `path` と一緒に使用できません router.push({ path: '/details', params: { id: '001' } }) // -> /details

コンポーネントはデータを取得する

ルートが一致すると、そのパラメータの値がすべてのコンポーネントでthis.$route.paramsとして公開されます。

const 詳細 = {
 テンプレート: '<div>詳細 {{ $route.params.id }} </div>',
 作成された() {
  // ルートの変更をリッスンします this.$watch(
   () => this.$route.params,
   (toParams、前のParams) => {
    // ルートの変更に応答します...
   }
  )
 },
}

2. パススルークエリ

この場合、 queryによって渡されたパラメータは、 /details/001?kind=carのように URL の後に表示されます。

ルーティング構成

queryを使用する場合、次の 3 つの方法がすべて可能です。

this.$router.push('/details/001?kind=car')
this.$router.push({ パス: '/details/001'、クエリ: { 種類: "車" }})
this.$router.push({ name: 'details', params: { id: '001' }, query: { kind: 'car' }})

コンポーネントはデータを取得する

コンポーネントは$route.queryを通じて取得されます。

const 詳細 = {
 テンプレート: '<div>詳細 {{ $route.query.kind }} </div>',
 作成された() {
  // ルートの変更をリッスンします this.$watch(
   () => this.$route.query,
   (toParams、前のParams) => {
    // ルートの変更に応答します...
   }
  )
 },
}

同じコンポーネント内のパラメータの変更に応答するには、 $routeオブジェクトの任意のプロパティ (この場合は$route.queryを監視するだけです。

3. ハッシュで渡す

このように、URL パスにはhashが含まれます (例: /details/001#car

ルーティング構成

hashを使用する場合、次の 3 つの方法はすべて実行可能です ( queryと同じ)。

this.$router.push('/details/001#car')
this.$router.push({ パス: '/details/001', ハッシュ: '#car'})
this.$router.push({ name: 'details', params: { id: '001' }, hash: 'car'})

コンポーネントはデータを取得する

コンポーネントは$route.hash.slice(1)を通じて取得されます:

const 詳細 = {
 テンプレート: '<div>詳細 {{ $route.hash.slice(1) }} </div>',
}

小道具によるパス

コンポーネント内で$routeを使用すると、ルーターと密接に結合され、特定の URL にしか使用できないため、コンポーネントの柔軟性が制限されます。これは必ずしも悪いことではありませんが、 props構成を介してこの動作をオーバーライドできます。

主にルート構成で、 propsを使用して分離された方法でパラメータを渡します。

1. ブールモード

propstrueに設定されている場合、 route.paramsコンポーネントの props として設定されます。

たとえば、次のコードは$routeを通じて動的フィールドidを取得します。

定数ユーザー = {
 テンプレート: '<div>ユーザー {{ $route.params.id }}</div>'
}
const ルート = [{ パス: '/user/:id', コンポーネント: ユーザー }]

上記のコードを次のようにpropsに置き換えます。

定数ユーザー = {
 props: ['id'], // コンポーネント内のpropsを通じてIDを取得します
 テンプレート: '<div>ユーザー {{ id }}</div>'
}
// ルーティング設定で、props フィールドを追加し、値を true に設定します
const ルート = [{ パス: '/user/:id', コンポーネント: User, プロパティ: true }]

注意: 名前付きビューを持つルートの場合は、名前付きビューごとにprops構成を定義する必要があります。

定数ルート = [
 {
  パス: '/user/:id',
  コンポーネント: { デフォルト: ユーザー、サイドバー: サイドバー },
  // ユーザーにプロパティを提供する
  プロパティ: { デフォルト: true、サイドバー: false }
 }
]

2. オブジェクトモード

propsがオブジェクトの場合、そのままコンポーネント props として設定されます。小道具が静的である場合に便利です。

ルーティング構成

定数ルート = [
 {
  パス: '/hello',
  コンポーネント: こんにちは、
  プロパティ: { 名前: 'ワールド' }
 }
]

コンポーネント内のデータを取得する

定数Hello = {
 小道具: {
  名前: {
   タイプ: 文字列、
   デフォルト: 'Vue'
  }
 },
 テンプレート: '<div> こんにちは {{ name }}</div>'
}

<Hello />コンポーネントはデフォルトで Hello Vue を表示しますが、ルートはpropsオブジェクトで構成されます。ルートが/helloにジャンプすると、渡されたnameが表示され、ページに Hello World が表示されます。

3. 機能モード

props を返す関数を作成できます。これにより、パラメータを他のタイプに変換したり、静的な値とルートベースの値を組み合わせたりすることが可能になります。

ルーティング構成

関数モードを使用する場合、props を返す関数はrouteレコードをパラメーターとして受け取ります。

// プロパティを返す関数を作成する const dynamicPropsFn = (route) => {
 戻り値: { name: route.query.say + "!" }
}
定数ルート = [
 {
  パス: '/hello',
  コンポーネント: こんにちは、
  プロップ: dynamicPropsFn
 }
]

コンポーネントはデータを取得する

URL が/hello?say=World場合、 {name: 'World!'}プロパティとしてHelloコンポーネントに渡されます。

定数Hello = {
 小道具: {
  名前: {
   タイプ: 文字列、
   デフォルト: 'Vue'
  }
 },
 テンプレート: '<div> こんにちは {{ name }}</div>'
}

この時点でページは次のようにレンダリングされます。

注: props関数はルートが変更された場合にのみ使用されるため、可能な限りステートレスにしてください。プロパティを定義するために状態が必要な場合は、vue が状態の変更に反応できるようにラッパー コンポーネントを使用します。

その他の方法

1. Vuexを経由する

1. 保管状態を保存する。
2. コンポーネント A はストア内の状態を変更します。
3. コンポーネント B はストアから取得されます。

2. フロントエンドのローカルストレージやその他の方法を通じて

1. ローカルストレージ。
2. セッションストレージ
3. インデックスDB
4. Web SQL;
5. クッキー。

これで、Vue ルーティング コンポーネントでパラメータを渡す 8 つの方法についての記事は終了です。Vue ルーティング コンポーネントでパラメータを渡す方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ルーティングコンポーネントの読み込みステータスを処理する Vue 非同期コンポーネントのソリューション
  • Vue ルーティング コンポーネントをオンデマンドでロードするいくつかの方法の概要
  • Vue.jsルーティングコンポーネントvue-routerの使い方の詳しい説明
  • null投稿パラメータの問題を解決するために、vueベースのaxiosコンポーネントを追加します。
  • vue-router2.0 コンポーネント間でパラメータを渡し、動的パラメータを取得する方法
  • 親コンポーネントと子コンポーネント間の Vue.js パラメータ転送の例

<<:  MySQL 5.5 のインストールと設定のグラフィックチュートリアル

>>:  複数のプロジェクトをデプロイする Docker nginx の例

推薦する

Vue.jsで実装されたカレンダープラグインの使い方を詳しく説明します

本日実装する機能は、以下の機能です。vue.js シミュレーションカレンダープラグインさて、もう無駄...

フォームの送信イベントが応答しない

1. 問題の説明<br />JS を使用してフォームの送信メソッドを呼び出してフォームを...

Linux で文字化けしたファイルや特殊文字のファイルを削除する方法

エンコーディングの理由により、Linux サーバーに中国語のファイルやディレクトリをアップロードまた...

CentOS仮想マシンの時刻を変更する方法

上はシステム時間、下はハードウェア時間です。ここでは変更を加えているので、同じくらいの速さになってい...

Linuxのシグナルメカニズムについての簡単な説明

目次1. シグナルリスト1.1. リアルタイム信号と非リアルタイム信号1.2 信号ステータス1.3 ...

Youku 動画から 30 秒の広告コードを削除する 2 つの方法

誰もがこんな気持ちになったことがあると思います。30 秒の広告が入った動画を見ると、とても不快に感じ...

Dockerを使用してクローンリポジトリを使用してGitイメージを構築する

概要私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションし...

要素のフォーム要素の使用の概要

フォーム要素はたくさんあります。簡単にまとめると、次のようになります。私のやり方では、主にテキスト ...

入力ボックスのプレースホルダーテキストのデフォルトの色を変更する -webkit-input-placeholder メソッド

HTML5 では、入力用のネイティブ プレースホルダー属性が追加されており、これは高度なブラウザでサ...

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通...

マークアップ言語 - アンカー

前: マークアップ言語 - フレーズ要素 オリジナルソース 第 7 章 アンカーHTML のリンクの...

MySQL インポート csv エラーの 4 つの解決策

これは今日私が踏んだ4つの落とし穴を記念したものです...落とし穴1:地元のせいエラー:エラー 39...

Vue ミックスインの使用方法とオプションのマージの詳細な説明

目次1. コンポーネントでの使用2. オプションのマージ要約する1. コンポーネントでの使用Mixi...

WiFi 開発 | WiFi ワイヤレス テクノロジーの紹介

目次WiFiワイヤレステクノロジーの紹介1. WiFiテクノロジーの概要2. ESP8266の紹介W...

IDEA2021 tomcat10 サーブレットの新しいバージョンの落とし穴

私が学習していたときに使用していたバージョンは比較的新しいものであり、インターネット上のチュートリア...