Vueタブとキャッシュページを切り替えるいくつかの方法

Vueタブとキャッシュページを切り替えるいくつかの方法

1. 切り替え方法

動的コンポーネントを使用すると、誰でも理解できると思います(一部のコードは省略されています)

// <button @click="changeView">ビューの切り替え</button> をクリックすると、2 つのコンポーネントを切り替えることができます。
<コンポーネント:is="currentView"></コンポーネント>

 「@/views/pageA」からpageAをインポートします。
「@/views/pageB」からページBをインポートします。

 計算: {
  現在のビュー(){
      this.viewList[this.index]を返します。
  }
},
 メソッド: {
  ビューを変更する() {
    this.index=(++this.index)%2
  }
}

注: これは主に、1 つのページ内の複数のサブモジュールに使用されます。通常、より頻繁な切り替えには次のルーティングが使用されます。

ルーティングを使用する(これはルーティングの設定の問題なので、詳細は説明しません)

2. タブを動的に生成する

一般的に、UI フレームワークが提供するタブ切り替えは上記のようなものであり、複数のタブページやその他の構成を自分で記述する必要があります。しかし、左側のディレクトリをクリックしてタブ ページを生成し、いつでも閉じることができるようにしたい場合はどうすればよいでしょうか (以下を参照)。

ルートにクリック イベントを与え、ルート アドレスをリストに保存し、別のフラット タブ ディレクトリにレンダリングするだけです。

レイアウトが次のようになっているとします。左側にディレクトリ、上部にタブ、そして単語が書かれたページです。

<メニュー>
  <menu-item v-for="(item,index) in menuList" :key="index" @click="addToTabList(item.path)">
    <router-link :to="item.path">{{item.name}}</router-link>
  <メニュー項目>
</メニュー>
<テンプレート>
  <menu class="left"/>//メニューコード部分は上記と同じ <div class="right">
    <タブリスト>
      <tab-item v-for="(item,index) in tabList" :key="index">
        <router-link :to="item.path">{{item.name}}</router-link>
        <icon class="delete" @click="deleteTab"></icon>
      </タブ項目>
    </タブリスト>
    <ページビュー>
      <router-view></router-view>//ここにページが表示されます </page-view>
  </div>
</テンプレート>

上記のコードは実際のコードではなく、大まかなアイデアのみを示しています。 addToTabList と deleteTab のやり方は、配列メソッドの単純な push と splice 操作だけです。見栄えの良い効果を実現するには、タブにいくつかのアクティブなスタイルも必要になる場合がありますが、ここでは説明しません。

3. キャッシュコンポーネント

タブを切り替えるだけでは十分ではありません。結局のところ、誰もがタブ間を切り替えたいのです。入力したフォーム情報や、クエリされたデータのリストなど、操作の進行状況をさまざまなタブに保存する必要があります。
では、コンポーネントをどのようにキャッシュするのでしょうか?
Vueのkeep-aliveコンポーネントを使用するだけでよい

3.1 キープアライブ

  • <keep-alive> は Vue の組み込みコンポーネントであり、コンポーネントの切り替え中に状態をメモリ内に保持して、DOM の繰り返しレンダリングを防ぐことができます。
  • <keep-alive> 動的コンポーネントをラップする場合、非アクティブなコンポーネント インスタンスは破棄されるのではなくキャッシュされます。
  • <keep-alive> は <transition> に似ていますが、抽象コンポーネントです。DOM ツリー (実ツリーでも仮想ツリーでも) にはレンダリングされず、親コンポーネント チェーンにも存在しません。たとえば、keep-alive は this.$parent には存在しません。

注意: 固定コンポーネントをキャッシュするためにキープアライブを使用することはできません。無効になります。

//無効な <keep-alive>
  <私のコンポーネント></私のコンポーネント>
</キープアライブ>

3.2 使用

3.2.1 Vue 2.1 より前のバージョンの使用

<キープアライブ>
    <ルータービュー v-if="$route.meta.keepAlive"></ルータービュー>
</キープアライブ>
<ルータービュー v-if="!$route.meta.keepAlive"></ルータービュー>

ルーティング情報にルーターのメタ情報を設定する必要があります

デフォルトの新しいルーターをエクスポートします({
  ルート: [
    {
      パス: '/a',
      名前: 'A'、
      成分: A、
      メタ: {
        keepAlive: false // キャッシュは不要 }
    },
    {
      パス: '/b',
      名前: 'B'、
      成分: B、
      メタ: {
        keepAlive: true // キャッシュする必要がある }
    }
  ]
})

3.2.2 比較的新しいシンプルな使用法

すべてのコンポーネント/ルートを直接キャッシュする

<キープアライブ>
    <ルータービュー/>
</キープアライブ>
<キープアライブ>
   <コンポーネント :is="view"></コンポーネント>
</キープアライブ>

キャッシュする必要があるコンポーネント/ルートを処理するには、include を使用します。
include にはいくつかの使い方があります。配列、句読点で区切られた文字列、正規表現などです。正規表現を使用する場合は、v-bind を使用してバインドする必要があります。

<keep-alive include="['a','b']">//a、b という名前のコンポーネントをキャッシュします<keep-alive include="a,b">//a、b という名前のコンポーネントをキャッシュします<keep-alive :include="/^store/">//名前が store で始まるコンポーネントをキャッシュします <router-view/>//router-view にすることができます
    <component :is="view"></component>//動的コンポーネントにもなります</keep-alive>

exclude を使用してキャッシュする必要のないルートを除外することは、include の逆です。exclude 内のコンポーネントはキャッシュされません。使い方は似ているので、ここでは詳しく説明しません。

3.2.3 かなり奇妙な状況: ページ ジャンプ方法が A->C と B->C の 2 つある場合、A から C にジャンプするときにはキャッシュする必要はありませんが、B から C にジャンプするときにはキャッシュする必要があります。現時点では、これを実現するには、古いバージョンと組み合わせたルーティング フックを使用する必要があります。

エクスポートデフォルト{
  データ() {
    戻る {};
  },
  メソッド: {},
  beforeRouteLeave(to, from, next) {
    to.meta.keepAlive = false; // 次のページをキャッシュしない next();
  }
};
エクスポートデフォルト{
  データ() {
    戻る {};
  },
  メソッド: {},
  beforeRouteLeave(to, from, next) {
    // 次のルートのメタを設定する
    to.meta.keepAlive = true; //次のページキャッシュ next();
  }
};

3.3 キャッシュコンポーネントライフサイクル機能

キャッシュ コンポーネントを初めて開くときは、通常のコンポーネントと同様に、created や mounted などの関数も実行する必要があります。
ただし、再度アクティブ化および非アクティブ化されると、これらの共通コンポーネントのライフサイクル関数は実行されず、さらに 2 つの固有のライフサイクル関数が実行されます。

  • 活性化された

これは、キャッシュされたコンポーネントが再アクティブ化されたときに呼び出されます。

  • 無効化

これは、キャッシュされたコンポーネントが非アクティブ化されたときに呼び出されます。

上記は、vue タブを切り替えてキャッシュされたページを処理するいくつかの方法の詳細です。vue タブを切り替えてキャッシュされたページを処理する詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vueタブとキャッシュページを切り替えるいくつかの方法
  • Vueはタブを切り替えてデータの状態を維持する3つの方法を実装します
  • Vueは動的コンポーネントを使用してTAB切り替え効果を実現します
  • Vueコンポーネント開発におけるタブ切り替えコンポーネントの使用の詳細な説明
  • Vue は、要素タブを切り替えたときに echart が正しく表示されない問題を解決します
  • Vue タブは一定の高さまでスクロールし、上部に固定され、タブをクリックしてさまざまなコンテンツ操作を切り替えます。
  • Vueはデータの状態を維持するためにタブ切り替えを実装します
  • Vueタブ切り替え、echartstチャートの幅が100pxしかない問題を解決
  • Vue vantUI タブを切り替えたときにリスト コンポーネントがロード イベントをトリガーしない問題と解決策

<<:  MySQL の JSON 挿入の問題

>>:  Linux での umask の使用に関する詳細な説明

推薦する

ElementUI コンポーネント el-dropdown (落とし穴)

選択して変更: クリックすると現在の値が表示され、ページ UI が表示され、CSS スタイルが変更さ...

MySql 5.6.35 winx64 インストール詳細チュートリアル

注: データベースのバージョンの問題により、プロジェクトの起動時にエラーは発生しませんでしたが、デー...

Vue3 における computed の新しい使用例のまとめ

vue3 での computed の使い方。vue3 は vue2 のオプション API と互換性が...

Google ブラウザのラベルと入力間のスペースに関する小さな問題

最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...

DOCTYPE宣言の機能と使い方の詳しい説明

1. ブラウザのレンダリングモードとdoctype一部の Web ページは標準に従って作成されていま...

Iframe 適応高さコードに関する 3 つの議論

B/S システム インターフェースを構築する場合、メイン ページ index.html 内に他のペー...

Docker Docker の保存場所を変更する コンテナイメージのサイズ制限を変更する操作

これは新しいバージョンではもう不可能なようで、推奨されません。そうでない場合は、ソフト リンクを直接...

Dockerイメージ内のnoneイメージ操作を削除する

普段はdocker buildコマンドでイメージを生成していますが、コードの更新が頻繁に行われるとn...

nginx でのリクエストのカウント追跡の簡単な分析

まずは適用方法を説明します。nginxモジュールにはjtxyとjtcmdの2つがあります。 http...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

TypeScriptの列挙型を詳しく説明する

目次1. デジタル列挙2. 文字列の列挙3. 逆マッピング4. 異種列挙5. 定数列挙6. 列挙メン...

Markodwnによるタイトル配置による同期スクロールのアイデアの詳細な説明

序文私が作成中の Markodwn エディターに同期スクロール機能を追加する必要があります。Baid...

MySQL遅延スレーブを導入するメリットのまとめ

序文MySQL のマスター/スレーブ レプリケーション関係は、厳密には「同期」または「マスター/スレ...

MySql8.0.19 インストールピットレコードを共有する

前回の記事ではMySql8.0.19のインストール手順を紹介しました。必要な方はクリックしてご覧くだ...

vue-cli を使用してプロジェクトを作成し、webpack でパッケージ化する方法

1. 環境を準備する(Node.jsをダウンロードし、環境変数を設定する) 2. vue-cliをグ...