Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

1. 問題の説明

調整センターでは、最後の 2 つの便利なナビゲーション メニューが同じモジュールで、レベル 3 以上のメニューである場合、2 つの便利なタブを切り替えるときに正常にキャッシュできます。ただし、最後のタブが削除されると、もう一方のタブ ページはキャッシュされなくなります。

2. 原因分析

デフォルトでは、keep-alive は 2 レベルのキャッシュをサポートしており、レベル 3 以上のページのキャッシュは無効です。以前の処理方法は、ルートの変更を監視した後、現在のルート識別子と親識別子を一緒に保存します。複数のページが存在する場合、いずれかのページを閉じると、自分自身と親の識別子も削除されます。このとき、配列には親識別子がないため、同じレベルの他のページのキャッシュは無効になります。

3. 解決策

ルーティング構成テーブル内のすべてのルートを 2 つの操作に分割します。1 つはメニュー表示用にそのまま保持すること、もう 1 つはルーティング構成テーブルをフラット化してすべてのルートをセカンダリ ルートに処理し、keep-alive がデフォルトでキャッシュをサポートできるようにすることです。

4. 処理

完全なルーティング構成を取得する

定数モジュール = []
files.keys().forEach(キー => {
    const filesObj = files(キー).default || files(キー)
    Object.keys(filesObj).forEach(keyOne => {
        modules.push(filesObj[keyOne])
    })
})

操作によりルーティング構成が完了しました

export const menuList = modules; // メニュー表示用​
const routerList = formatTwoStageRoutes(formatFlatteningRoutes(modules)); // ルートを 2 段階ルートにフラット化します​
const ルーター = 新しい VueRouter({
    スクロール動作: () => ({ y: 0 }),
    モード: '履歴'、
    ベース: process.env.BASE_URL、
    ルート: routerList, //ルーティング設定項目でフラット化されたルートを使用する})

平坦化法

エクスポートconst formatFlatteningRoutes = (routesList => {
  routeList.length <= 0 の場合、routesList を返します。
  リストを [] にします。
  ルートリスト.forEach(v => {
    if(v.path === '/') {
      // 初期レイアウトとホームページを追加するために使用されます。他のセンター構成は、レイアウトと親ノードをフィルターし、子のルートのみを保持します list.push(v);
      リスト = list.concat(formatFlatteningRoutes(v.children))
    } そうでない場合 (v.children && v.children.length > 0) {
      リスト = list.concat(formatFlatteningRoutes(v.children))
    } それ以外 {
      リストをプッシュします。
    }
  })
  リストを返します。
})
​
エクスポート const formatTwoStageRoutes = list => {
  if (list.length <= 0) の場合はリストを返します。
  定数ルーターリスト = [];
  リスト.forEach(v => {
    (v.path === '/')の場合{
      ルータリスト.push({
        コンポーネント: v.component、
        名前: v.name、
        パス: v.path,
        リダイレクト: 動詞、
        メタ: v.meta,
        子供たち: []
      })
    } そうでない場合 (v.path === '/login' || v.path === '/showcasePage') {
      // レイアウト設定を必要としないページ routerList.push(v)
    } それ以外 {
      ルーターリスト[0].children.push({ ...v })
    }
  })
  routerList を返します。
}

Vue のキープアライブ マルチレベル ルーティング キャッシュ問題に関するこの記事はこれで終わりです。Vue キープアライブ マルチレベル ルーティング キャッシュに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueのキープアライブコンポーネントは、複数レベルのネストされたルートのキャッシュを実装します。
  • Vue のルーティングガードとキープアライブライフサイクルの詳細な説明
  • Vue のキープアライブの詳細な説明
  • vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明
  • Vue でキープアライブを使用した後にキャッシュをクリアする方法
  • Vueキープアライブの実装原理の分析

<<:  Dockerコンテナ起動時に固定IPを設定する実装

>>:  MySQL マルチインスタンス構成のアプリケーションシナリオ

推薦する

vscodeでnpmを使用してbabelをインストールする方法

序文前回の記事ではNode.jsのインストールと設定を紹介しました。今回はVScodeでbableを...

Better-scrollはメニューとコンテンツをリンクする効果を実現します

1. 基本的な使い方 <!DOCTYPE html> <html lang=&qu...

Dockerコンテナのいくつかの保存方法の詳細な説明

目次前面に書かれた複数のストレージマウント方法1.バインドマウント2. 巻数3.tmpfsマウントス...

Vuexはセッションストレージデータを結合して、ページを更新するときにデータが失われる問題を解決します

目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...

MySQL 5.7 データベースのインストール手順の個人的な要約

1.mysql-5.7.19-winx64.zip(これは無料のインストールバージョンで、約318 ...

Centos7 での python3 のインストールとアンインストールに関するチュートリアル

1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...

MySQL の時間保持問題に関する簡単な分析

MySQL のデフォルトの時間タイプ (datetime と timestamp) の精度は秒です。...

Linuxテキスト処理ツールの詳細な説明

1. /etc/passwdファイル内のデフォルトシェルが/sbin/nologinではないユーザー...

CentOS 8が利用可能になりました

CentOS 8 が利用可能になりました! CentOS 8 と RedHat Enterprise...

VUE のコンパイル スコープとスロット スコープのスロットの問題について

スロットとは何ですか?スロット ディレクティブは v-slot であり、現在 slot と slot...

マウスを動かしたときに画像のズーム効果とゆっくりとした遷移​​効果を実現するCSSのサンプルコード

transform:scale()比例したズームインまたはズームアウトを実現できます。 transi...

CSS3で蓮の花が咲くアニメーション効果を実現

まずは効果を見てみましょう:この効果は非常に華やかに見えますが、原理は複雑ではありません。1 枚の花...

JavaScriptはシンプルな日付効果を実装します

JavaScriptの日付エフェクトの具体的なコードは参考用です。具体的な内容は次のとおりです。コー...

Vue のルータールーティングの 2 つのモード (ハッシュと履歴) の詳細な説明

ハッシュモード(デフォルト)動作原理:ウェブページのハッシュ値の変化を監視する—> onhas...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...