Vue ルーターにパラメータを渡すときにページを更新するとパラメータが失われる問題に対処する方法

Vue ルーターにパラメータを渡すときにページを更新するとパラメータが失われる問題に対処する方法

概要

一般的なシナリオ: リストの詳細をクリックして詳細ページに移動し、渡されたパラメータに基づいて内部ページで詳細データを取得します。

ルートパラメータを渡す方法は一般的にいくつかあります。以下では主にプログラムナビゲーション router.push のパラメータ渡しの方法を紹介します。

方法1: params経由でパラメータを渡す

ルーティング構成は次のとおりです。

{ 
    path: '/detail/:id', // id の後に ? が続く場合、このパラメータはオプションであることを意味します name: 'detail', 
    コンポーネント: 詳細 
}

$router.pushのパスパラメータを使用する

// リスト内のパラメータを渡す goDetail(row) {
    this.$router.push({
        パス: `/detail/${row.id}`
    })
}

// 詳細ページでパラメータ this.$route.params.id を取得します

$router.pushのparamsを通じてパラメータを渡す

// リストページパラメータ goDetail(row) {
    this.$router.push({
        名前: '詳細',
        パラメータ: {
            id: 行.id
        }
    })
}

// 詳細ページで this.$route.params.id を取得します

注: このパラメータ渡し方法では、パスは名前を使用し、パスは名前を使用し、パスは名前を使用します。パスが使用されている場合、パスは取得されません。ルーティング構成に /:id、つまり path: 'detail' が追加されていない場合、ID は URL に表示されません。詳細ページでパラメータ ID を取得することはできますが、更新後にパラメータは失われます。

上記の 2 つの方法では、渡されたパラメータ ID が、図に示すように URL の後に表示されます。

渡されたパラメータは URL で公開されます。

ルートに params パラメータ /:id が設定されているが、ジャンプ時にパラメータが渡されない場合、ページにコンテンツがないか、ジャンプが失敗します。最後に追加できますか?このパラメータがオプションであることを示します (例: /:id?)

方法2: クエリを通じてパラメータを渡す

//ルート設定{ 
    パス: '/detail', 
    名前: '詳細', 
    コンポーネント: 詳細 
}

// リストページ goDetail(row) {
    this.$router.push({
        パス: '/detail',
        クエリ: {
            id: 行.id
        }
    })
}

//詳細ページ this.$route.query.id

注: この方法で渡されたパラメータは、アドレス バーの URL の後に表示されます。id =?、get パラメータの渡し方と同様です。パラメータを渡すには、パスとともにクエリを使用する必要があります。

渡されたパラメータはオブジェクトまたは配列です

また、クエリ経由でオブジェクトや配列を渡すと、アドレスバーで強制的に[object オブジェクト]に変換されてしまい、更新後にオブジェクト値が取得できなくなります。

このとき、JSON.stringify() メソッドを使用して、渡すパラメータを文字列に変換し、JSON.parse() を使用して詳細ページのオブジェクトに変換することができます。

parObj = JSON.stringify(obj) とします。
this.$router.push({
    パス: '/detail',
    クエリ: {
        'obj': パーオブジェクト
    }
})

//詳細ページ JSON.parse(this.$route.query.obj)

この方法はオブジェクトを渡すこともできますが、データが小さい場合は問題ありませんが、データが大きい場合はアドレスバーが非常に長くなります。

注: すべてのサブコンポーネントでは、ルートパラメータは$routerではなく$routeによって取得されます。

上記のパラメータとクエリパラメータの受け渡し方法の比較:

  • params + $router.push の名前でパラメータを渡します。ルートに params パラメータが設定されていない場合、ルート後にパラメータはスプライスされませんが、ページ更新パラメータは失われます。
  • $router.push のパスにパラメータを指定したり、クエリを通じてパラメータを渡したりすると、パラメータはアドレスの後に連結され、情報が公開されます。

方法3: propsを使用してコンポーネントルートを分離する

//ルート設定{ 
    パス: '/detail/:id',
    名前: '詳細', 
    コンポーネント: 詳細、
    props: true // props が true に設定されている場合、$route.params はコンポーネントのプロパティとして設定されます}

// リストページ goDetail(row) {
    this.$router.push({
        パス: '/detail',
        クエリ: {
            id: 行.id
        }
    })
}

//詳細ページのエクスポートデフォルト{
    小道具: {
        // ルートで渡されたパラメータ id をコンポーネント id: String の props プロパティに分離します。
    },
    マウント: {
        コンソールログ(このID)
    }
}

また、パラメータを sessionStorage または localStorage に保存することで、ページ更新パラメータの損失の問題を解決することもできます。詳細については、実際のプロジェクトを参照してください。

以上がvueルータールーティングのページ更新時にパラメータが失われる場合の対処方法の詳細です。vueの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください!

以下もご興味があるかもしれません:
  • Vueリストデータを削除した後、ページを自動的に更新する方法と更新方法の詳細な説明
  • Vueルーターはパラメータを渡し、ページを更新するときにパラメータが失われる問題を解決します
  • Vueはルートの変更を監視し、App.vueファイル内のページを更新します。
  • Vueがページを更新した後にストアデータが失われる問題を解決する
  • Vueはページを更新するために3つの方法を使用する

<<:  MySQLインストーラがコミュニティモードで実行されている場合の解決策

>>:  MySql の集計関数に条件式を追加する方法

推薦する

初心者のためのウェブサイト構築入門 - ウェブサイト構築に必要な条件とツール

今日は、初心者の次のような質問に答えます。学ぶ勇気さえあれば、自分のウェブサイトを構築するのは簡単で...

CSS3アニメーションジャミングソリューションについての簡単な説明

なぜ詰まっているのでしょうか?言及しなければならない前提があります。フロントエンド開発者は皆、ブラウ...

RHEL7.5 mysql 8.0.11 インストールチュートリアル

この記事はRHEL7.5でのMySQL 8.0.11のインストールチュートリアルを記録しています。具...

コードをセマンティックにする HTML のヒント

HTML のセマンティクスはありふれた問題のようです。Google で検索すると、セマンティクスに関...

CSS3 を使用して入力複数選択ボックスのスタイルをカスタマイズする例

原則: まず入力要素を非表示にし、次に CSS を使用してラベル要素のスタイルを設定します (他の要...

VMware 仮想マシンのインストール Linux システムのグラフィック チュートリアル

この記事では、LinuxシステムのVMwareインストールの具体的な手順を参考までに紹介します。具体...

MySQLデータベースのSYNフラッディング問題を解決する

Syn 攻撃は、最も一般的で最も簡単に悪用される攻撃方法です。TCP プロトコルの欠陥を利用して、偽...

コードブロックのハイライトをコピーして表示できる js プラグイン highlight.js + clipboard.js 統合

主に2つの側面から: 1. ハイライト/改行2. コードのコピーボタンこれら両方には既製のプラグイン...

mysql5.7.19 zip 詳細なインストールプロセスと構成

MySQL v5.7.19 正式版(32/64 ビットインストール版および zip 解凍版) 1. ...

Docker x509 の安全でないレジストリ問題を解決する

Docker をインストールした後、会社が構築したプライベート サーバー Harbor からプルしよ...

Web プロジェクトでの SQL インジェクションの防止

目次1. SQLインジェクションの概要2. SQLインジェクション攻撃の全体的な考え方SQLインジェ...

MySQL 5.7.13 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

はじめに: HTML の基本的なタグと属性の簡単な紹介

HTML はタグと属性で構成されており、これらを組み合わせてブラウザにページの表示方法を指示します。...

JavaScript ではおそらく switch 文を使う必要はない

目次スイッチも複雑なコードブロックもありませんPythonからのインスピレーション辞書を使用してスイ...

MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...