Vueコンポーネントのルーティング強調表示問題の解決策

Vueコンポーネントのルーティング強調表示問題の解決策

序文

以前は、キャッシュを使用してルートを強調表示していました。すべてのルートをトラバースし、クリックされるたびにルートの現在の値を強調表示し、アクティブな値を割り当てていました。その後、リフレッシュすると動作せず、ハイライトされた部分がデフォルト値の 0 になってしまうことが分かりました。ここでは主にこの問題の解決方法について説明します。

1 つ目は、次のようにクラスを追加することです。

.ルーター{
        フォント: 12px/40px 'Microsoft YaHei';
        背景: ピンク;
        背景: ピンク;
        色: 白;
        カーソル: ポインタ;
        テキスト配置: 中央;
        表示: インラインブロック;
        幅: 40px;
        背景: ピンク;
        &.isActive{
            背景: 青;
            色:赤;
        }
    }

2 番目はパスを監視することです。

元のコードは次のとおりです。

<テンプレート>
<div id="メイン">
    <ul style="height:40px;background:pink;">
        <li class="router" v-for="(item,index) in items" :key="index" style="float:left;" :class="item.isActive?'isActive':''" @click="routerTo(item,index)">
            <span >{{item.name} </span>
        </li>
    </ul>
    <ルータービュー></ルータービュー>
    </div>
    
</テンプレート>
<スクリプト>
    エクスポートデフォルト{
        データ () {
            戻る {
                アクティブインデックス2:'0'、
                アイテム:[
                    {名前:'twoPage',コード:'twoPage',パス:'/twoPage',デフォルトアイコン:require('@/assets/icon/BehaviorRank-default.png'),
                    アクティブアイコン:require('@/assets/icon/behaviorrank-active.png'),isActive:true},
                    {名前:'three',コード:'three',パス:'/three',デフォルトアイコン:require('@/assets/icon/ChannelAllocation-default.png'),
                    activeIcon:require('@/assets/icon/ChannelAllocation-active.png'),isActive:false},
                    {名前:'four',コード:'four',パス:'/four',デフォルトアイコン:require('@/assets/icon/myReport-default.png'),
                    activeIcon:require('@/assets/icon/myReport-active.png'),isActive:false},
                ]、
            }
        },
        方法:{
            ルーターTo(アイテム,インデックス) {
                 (i = 0 とします; i < this.items.length; i++) {
                    this.items[i].isActive=false
                    
                }
                this.items[インデックス].isActive=true
                this.$router.push({name:item.name})
               
            },
        }
    }
</スクリプト>
<スタイル lang='less'>
#主要{
    .ルーター{
        フォント: 12px/40px 'Microsoft YaHei';
        背景: ピンク;
        背景: ピンク;
        色: 白;
        カーソル: ポインタ;
        テキスト配置: 中央;
        表示: インラインブロック;
        幅: 40px;
        背景: ピンク;
        
    }
    .isActive{
            背景: 青;
            色:赤;
        }
    
}

</スタイル>

効果:

ただし、[更新] をクリックすると、強調表示されたインデックスは初期化位置 0 に移動します。

この問題を解決する方法

これを行う 1 つの方法は、sessionStorage をキャッシュすることです。クリックするたびにキャッシュに保存され、更新されて変数から値が取得され、変数に値がない場合はキャッシュから値が取得されます。しかし、入金や出金を繰り返すのが面倒だと感じる人もいるかもしれません。

別の方法は、初期化中にルートを取得し、異なるルートに応じて対応するナビゲーションをアクティブにすることです。

作成された(){
            // var path=window.location.hash.slice(2); // パラメータがない場合でもこれは許容されますが、推奨されません var path=this.$route.name // これは推奨されます console.log(path)
            if(パス){
                (i = 0 とします; i < this.items.length; i++) {
                    this.items[i].isActive=false
                }
                スイッチ(パス){
                    ケース 'twoPage':
                    this.items[0].isActive=true;
                    壊す;
    
                    ケース '3':
                    this.items[1].isActive=true;
                    壊す;
    
                    ケース '4':
                    this.items[2].isActive=true;
                    壊す;
                }
            }
        },

添付ファイル: Vueは現在のルートの特定のコードをクリックするとハイライト表示されます

機能表示:

コンポーネントコード:

ラベルに正確さを追加

.ルーターリンクアクティブ{
 背景: rgba(255,255,255,0.8);
 色: グレー;
 }

<テンプレート>
 <ナビ>
  <ul>
  <li>
   <router-link to="/" exact>ブログ</router-link>
   <router-link to="/AddBlog" exact>ブログを書く</router-link>
  </li>
  </ul>
 </nav>
</テンプレート>
 
<スクリプト>
 エクスポートデフォルト{
  名前: "bolgheader"
 }
</スクリプト>
 
<スタイルスコープ>
 ul{
 リストスタイルタイプ: なし;
 テキスト配置: 中央;
 マージン:0;
 }
 li{
 表示: インラインブロック;
 マージン:0 10px;
 }
 {
 色:rgb(102, 119, 204);
 テキスト装飾: なし;
 パディング:12px;
 境界線の半径: 5px;
 フォントサイズ:20px;
 }
 ナビ{
 背景: #eee;
 パディング: 30px 0;
 下部マージン: 40px;
 }
 .ルーターリンクアクティブ{
 背景: rgba(255,255,255,0.8);
 色: グレー;
 }
</スタイル> 

要約する

これで、vue コンポーネントのルート強調表示問題の解決策に関するこの記事は終了です。vue コンポーネントのルート強調表示に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vuejs トグルナビゲーションバーのハイライト(ルートメニューのハイライト)メソッドの例
  • Vue-routeナビゲーションメニューバーのハイライト設定方法
  • Vue-router セカンダリナビゲーションの切り替えルートとハイライトの実装方法
  • Vueルートのネストされたハイライトの問題の解決策
  • vue2 でのセカンダリルーティングの強調表示の問題と設定方法
  • Vueは現在のルートをクリックして小さな例を強調表示します
  • Vueプロジェクトは、ルートのハイライトに対応するメニュー項目の設定を実装します
  • Vue におけるセカンダリルートのネストとセカンダリルートのハイライトに関する簡単な説明

<<:  Kali Linux システムのバージョンを確認する方法

>>:  MySQL Community Server 8.0.11 のインストールと設定方法のグラフィックチュートリアル

推薦する

CSS はこのように使用できますか?気まぐれなグラデーションの芸術

前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...

フォーム送信時に追加のパラメータを渡すためのいくつかの一般的な方法

フォームを送信するときに、送信前に追加のパラメータが追加される状況が発生する場合があります。この問題...

JavaScriptはeコマースプラットフォームの製品詳細を実装します

この記事では、電子商取引プラットフォームで商品の詳細を表示する一般的な例を紹介します。たとえば、ある...

ポップアップウィンドウの上下中央左右と透明な背景のロックウィンドウ効果を実現する CSS

クリック後にポップアップボックスを実現し、上下左右に中央揃えし、灰色の透明マスクを追加してウィンドウ...

Vue が値を返してフォームを動的に生成し、データを送信する仕組みの詳細な説明

目次解決された主な問題1. バックエンドから返され、バックエンドに送信されるデータは、次の形式になり...

Node.js を使用して png 画像に透明なピクセルがあるかどうかを判断する方法

背景PNG 画像は jpg 画像よりも多くのストレージスペースを占有しますが、PNG 画像の品質は大...

NginxとLuaによるグレースケールリリースの実装

memcachedをインストールする yum インストール -y memcached #memcac...

MySQL は、あるテーブルのデータに基づいて別のテーブルの特定のフィールドを更新します (SQL ステートメント)

次のコードは、MySQL が 1 つのテーブルのデータに基づいて別のテーブルのいくつかのフィールドを...

CentOS 7 で RPM を使用して mysql5.7.13 をインストールする

0. 環境この記事のオペレーティング システム: CentOS 7.2.1511 x86_64 My...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

Vue 基本チュートリアル: 条件付きレンダリングとリストレンダリング

目次序文1.1 機能1.2 要素の可視性を制御する方法1.3 初期レンダリングの比較1.4 スイッチ...

携帯電話番号の歩数記録を取得するWeChatアプレット

序文最近、小さなプログラムを開発しているときに、このような問題に遭遇しました。ユーザーが認証をクリッ...

uniappがインターフェースドメイン名を動的に取得する方法を分析する

背景インターフェイス ドメイン名はハードコードされておらず、動的に取得されます。具体的な実装は、静的...

Web ページでの Unicode 文字の使用の概要 (&#、\u など)

初期のコンピュータでは ASCII 文字しか使用できませんでしたが、コンピュータのアプリケーションの...

Ubuntuデュアルシステムが起動時に停止する問題の解決方法の詳細な説明

起動時に Ubuntu デュアル システムが停止する問題の解決方法 (Ubuntu 16.04 およ...