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 の例

推薦する

Mybatis マッパー動的プロキシの原理の分析

序文動的プロキシの原理を説明する前に、まず、mybatis を統合した後の dao 層の 2 つの実...

Vueウォッチの監視方法の概要

目次1. Vueにおけるwatchの役割はその名の通り、監視の役割です。 2. このオブジェクトのプ...

2018 年にリリースされる Apache Spark 2.4 の新機能は何ですか?

この記事は、2018 年 9 月 19 日に Adob​​e Systems Inc で開催された ...

React+Typescriptはカウントダウンフックメソッドを実装します

まず、setIntervalはフックとしてカプセル化されます👇 'react' から...

Linux で txt を mysql にインポートする方法

序文昨日、小さなプロジェクトを書いていたときに、txt ドキュメントのデータを mysql データベ...

MySQL ストアド プロシージャで if ステートメントを使用する詳細な例

この記事では、例を使用して、MySQL ストアド プロシージャでの if ステートメントの使用方法を...

フロントエンドの面接でよく聞かれる JavaScript の質問の完全なリスト

目次1. 手書きのインスタンス2.配列のマップメソッドを実装する3. Reduceは配列のmapメソ...

CSS 読み込み効果の実装 パックマン

えーっと、名前はただの推測です 2333序文これは練習用の CSS デモです。何か間違っている点があ...

MySQL FAQ シリーズ: 一時テーブルを使用する場合

一時テーブルの概要一時テーブルとは: MySQL は中間結果セットを保存するために使用されます。一時...

新しい Linux ファイル権限設定における umask の詳細な理解

序文起源は質問 1 です: umask が 022 に設定されている場合、作成するファイルのデフォル...

Pycharmとsshリモートアクセスサーバーdockerの詳細なチュートリアル

背景: 一部の実験はサーバー上で完了する必要があります。したがって、リモート サーバー上のコードをロ...

...

Vueは遅延読み込みによりページの応答速度を向上

目次概要遅延読み込みとは何ですか?最適化を開始するビジネスモジュールを分割する遅延読み込みルート構成...

Vue3 の emitting と attr の違いの分析

目次結論は実践分析拡張機能要約する結論は親コンポーネントでカスタム イベントが定義されている場合、子...