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 の集計関数に条件式を追加する方法

推薦する

nginx で複数のフロントエンド プロジェクトをデプロイするいくつかの方法

nginx を使用して 1 つのサーバーに複数のフロントエンド プロジェクトをデプロイする 3 つの...

MySQLが2つのテーブルを関連付ける際のエンコードの問題と解決策

Mysqlが2つのテーブルを関連付けると、次のエラーメッセージが生成されます:照合順序の不正な組み合...

Linux での MongoDB のインストールと設定のチュートリアル

MongoDBインストールYumを使用してインストールすることを選択する1. repoファイルを作成...

ラベルとスパンの幅設定が無効である問題の解決

デフォルトでは、ラベルとスパンの幅の設定は無効です。一般的に、表示属性は必須ですコードをコピーコード...

JavaScript で Priority Queue を実装する

目次1. 優先キューの紹介2. 優先キューのカプセル化1. 優先キューの紹介通常のキューに要素が挿入...

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

イメージのパッケージ化とワンクリック展開を実現するためにDockerを組み合わせたアイデア

1. サーバーにDockerをインストールする yumでdockerをインストール設定ファイルを変更...

MySQL の instr を使用したファジー クエリ メソッドの紹介

MySQL の内部関数instrを使用すると、従来の like クエリ メソッドを置き換えることがで...

フロントエンドJavaScript ES6の詳細について

目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...

Nginx で WordPress 擬似静的を設定する方法の例

Baidu の擬似静的の説明を引用します。擬似静的は、実際の静的に相対的です。通常、検索エンジンの使...

MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

Mysqlデータベーステーブルの定期的なバックアップの実装0. 背景実際の開発環境では、フロントエン...

Linux CentOS 7.7 システムの VMware インストールに関する詳細なチュートリアル

Linux CentOS 7.7 システムを Vmware にインストールする方法。最小限のインスト...

JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...

Dockerカスタムネットワークの詳細な紹介

目次Dockerカスタムネットワーク1. カスタムネットワークの紹介2. カスタムネットワークを作成...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...