要素動的ルーティングブレッドクラムの実装例

要素動的ルーティングブレッドクラムの実装例

マスターするには: localStorage、コンポーネントのカプセル化

画像の説明を追加してください

えーと、GIF に変換したビデオをアップロードするのは初めてですが、結果はあまり良くありません。 。 。
ビデオを GIF に変換するソフトウェア リンク https://www.jb51.net/softs/723131.html

components の下に curmbs という新しいフォルダーを作成し、そのフォルダー内に index.vue という新しいファイルを作成します。

router.jsの設定、メタオブジェクトを追加する

ここに画像の説明を挿入

コード

<テンプレート>
  <div class="パンくず">
    <!-- パンくずリスト -->
    <el-card クラス="ボックスカード">
      <el-breadcrumb セパレーター="/">
        <el-breadcrumb-item v-for="(level,index) in this.levelList" :key="index" :to="level.path">
          {{レベル名}}
        </el-breadcrumb-item>
      </el-breadcrumb>
    </el-card>

  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前:「パンくず」、
  データ() {
    戻る {
        レベルリスト: []
    }
  },
  時計:
    $route(宛先、送信元) {
      console.log(送信先、送信元)
      // アイデア: meta で breadNumber を決定し、それを最初の場所に置く // 注: localStorage に保存されるデータ形式は統一する必要があります。ここでは配列形式に統一しました // levelList の最終的な形式は次のようになります: [{name:"xx",path:"xx",breadNum:"xx"}]
      this.getBreadcrumb()
    }
  },
  方法:{
    パンくずを取得する() { 
      // 1. 現在の名前、パス、breadNumber を取得します
      var newName = this.$route.name;
      var newPath = this.$route.fullPath;
      var newBreadNum = this.$route.meta.breadNumber;   

      // 2. 前のページで保存した名前、パス、breadNumber を取得します
      var oldName = JSON.parse(window.localStorage.getItem("oldName"));
      var oldPath = JSON.parse(window.localStorage.getItem("oldPath"));
      var oldBreadNum = JSON.parse(window.localStorage.getItem("oldBreadNum"));
      var routerInfo = JSON.parse(window.localStorage.getItem("routerInfo")) || [];  
      
      this.levelList = ルーター情報;     
      
      // 3. 最初のレイヤー、つまり初期位置であるかどうかを判定します。最初のレイヤーである場合、2つのケースがあります if(this.$route.meta.breadNumber === 1){
      // 3.1 localStorage に値がある場合、this.levelList は空ではありません。つまり、前のメイン ルートからのものです。前の localStorage 値をクリアして、levelList に再割り当てする必要があります。
        (this.levelList.length != 0 )の場合{
          localStorage.removeItem("古い名前");
          localStorage.removeItem("古いパス");
          localStorage.removeItem("古いBreadNum");
          localStorage.removeItem("ルーター情報");
          this.levelList = [];            
        }
      // 3.2 localStorage には値がないので、メイン ルートに初めて入るので、値を直接割り当てます。this.levelList.push({"name":newName,"path":newPath,"breadNumber":newBreadNum});
        // this.$store.commit('breadCrumb/BREAD_PATH',{ newName,newPath,newBreadNum });
        //配列形式で保存 var nameStr = [];
        nameStr.push(新しい名前);
        var pathStr=[];
        pathStr.push(新しいパス);
        var パン番号Str = [];
        breadNumStr.push(newBreadNum);

        window.localStorage.setItem("oldName",JSON.stringify(nameStr));
        window.localStorage.setItem("oldPath",JSON.stringify(pathStr));
        window.localStorage.setItem("oldBreadNum",JSON.stringify(breadNumStr));
        window.localStorage.setItem("routerInfo",JSON.stringify(this.levelList));
                
      }
      それ以外{  
        var isBreadNumber = false;   
        // 4.breadNumberが1に等しい場合を除き、breadNumberが他の値と等しい場合、this.levalListは空であってはなりません。クリックされたbreadNumberが配列に存在するかどうかを確認します。 // 4.1 存在する場合は、それ以降の値をすべて削除し、クリックして取得した値をthis.levalList配列に格納します。 // 4.2 存在しない場合は、順番に行われたことを意味します。localStorageに格納し、this.leavalList配列に値を渡します。 // ここで戻る必要はありません。そうしないと、ループが終了します for(var i = 0; i< this.levelList.length; i++){
            if(this.levelList[i].breadNumber == newBreadNum){
              // true を返します。 // true は配列がすでに存在することを意味します。false は配列が存在しないことを意味します。 isBreadNumber = true;
              壊す;
            }
          }
          
          if(isBreadNumber){
            // クリック後のすべての情報を削除し、localStorage のデータも削除します (ここでの削除は完全な削除ではなく、インターセプションです)。その後、次の情報を追加します // ここでの変更はパンくずリストをクリックすることでも発生する可能性があり、他の場所は通常ルーティング ジャンプを通じて取得されることに注意してください // ここでの splice の使用方法に注意してください。localStorage.setItem に直接記述した場合、取得される値はインターセプトされた値であり、インターセプトされた値ではありません oldName.splice(newBreadNum,oldName.length-newBreadNum);
            window.localStorage.setItem("oldName",JSON.stringify(oldName));

            oldPath.splice(newBreadNum、oldPath.length-newBreadNum);
            window.localStorage.setItem("oldPath",JSON.stringify(oldPath));

            oldBreadNum.splice(newBreadNum、oldBreadNum.length-newBreadNum);
            window.localStorage.setItem("oldBreadNum",JSON.stringify(oldBreadNum));

            routerInfo.splice( 新しいブレッド番号、 routerInfo.length - 新しいブレッド番号);
            window.localStorage.setItem("routerInfo",JSON.stringify(routerInfo))
            
          }
          それ以外{
            var oldNameStr = JSON.parse(window.localStorage.getItem("oldName"));
            oldNameStr.push(newName);
            window.localStorage.setItem("oldName",JSON.stringify(oldNameStr));
            
            var oldPathStr = JSON.parse(window.localStorage.getItem("oldPath"));
            古いPathStrを新しいPathにプッシュします。
            window.localStorage.setItem("oldPath",JSON.stringify(oldPathStr));

            var oldBreadNumStr = JSON.parse(window.localStorage.getItem("oldBreadNum"));
            古いBreadNumStr.push(新しいBreadNum);
            window.localStorage.setItem("oldBreadNum",JSON.stringify(oldBreadNumStr));
            
            this.levelList.push({"name":新しい名前、"path":新しいパス、"breadNumber":新しいBreadNum});
            window.localStorage.setItem("routerInfo",JSON.stringify(this.levelList));     
          }
        }
      }

      
  },
  
  作成された(){
    パンくずを取得します。        
  }
}
</スクリプト>

<スタイル スコープ lang="scss">
.ボックスカード{
  下マージン: 20px;
}
</スタイル>

上記の localStorage に保存されている名前、パス、breadNum は、テスト時に保存したものです。削除することもできます。簡潔なコードは次のとおりです。

<テンプレート>
  <div class="パンくず">
    <!-- パンくずリスト -->
    <el-card class="box-card" v-show="isShow">
      <el-breadcrumb セパレーター="/">
        <el-ブレッドクラム項目>
          <a href="javascript:;">{{$route.matched[0].name}}</a>
        </el-breadcrumb-item>
        <el-breadcrumb-item v-for="(level,index) in this.levelList" :key="index" :to="level.path">
          {{レベル名}}
        </el-breadcrumb-item>
      </el-breadcrumb>
    </el-card>

  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前:「パンくず」、
  小道具:{
    表示:{
        タイプ:ブール値、
        default:true //デフォルト値はtrueです。表示}
  },
  データ() {
    戻る {
        レベルリスト: []
    }
  },
  時計:
    $route(宛先、送信元) {
      // コンソール.log(to,from)
      // アイデア: meta で breadNumber を決定し、それを最初の場所に置く // 注: localStorage に保存されるデータ形式は統一する必要があります。ここでは配列形式に統一しました // levelList の最終的な形式は次のようになります: [{name:"xx",path:"xx",breadNum:"xx"}]
      this.getBreadcrumb()
    }
  },
  方法:{
    getBreadcrumb() { 
      // 1. 現在の名前、パス、breadNumber を取得します
      var newName = this.$route.name;
      var newPath = this.$route.fullPath;
      var newBreadNum = this.$route.meta.breadNumber;   

      // 2. 前のページで保存した名前、パス、breadNumber を取得します
      var routerInfo = JSON.parse(window.localStorage.getItem("routerInfo")) || [];     
      this.levelList = ルーター情報;     
      
      // 3. 最初のレイヤー、つまり初期位置であるかどうかを判定します。最初のレイヤーである場合、2つのケースがあります if(this.$route.meta.breadNumber === 1){
      // 3.1 localStorage に値がある場合、this.levelList は空ではありません。つまり、前のメイン ルートからのものです。前の localStorage 値をクリアして、levelList に再割り当てする必要があります。
        (this.levelList.length != 0 )の場合 {
          localStorage.removeItem("ルーター情報");
          this.levelList = [];            
        }
      // 3.2 localStorage には値がないので、メイン ルートに初めて入るので、値を直接割り当てます。this.levelList.push({"name":newName,"path":newPath,"breadNumber":newBreadNum});
        //配列形式で保存 window.localStorage.setItem("routerInfo",JSON.stringify(this.levelList));                
      } それ以外{ 
      
      // 4. breadNumber が 1 でない場合、this.levalList は null 値であってはなりません。取得した breadNumber が配列内に存在するかどうかを確認します。var isBreadNumber = false;          
        for(var i =0; i< this.levelList.length; i++){
          if(this.levelList[i].breadNumber == newBreadNum){
            // true を返します。 // true は配列がすでに存在することを意味します。false は配列が存在しないことを意味します。 isBreadNumber = true;
            break; //ここで return する必要はありません。return でループが終了します}
        }
          
        // 4.1 存在する場合は、すべてのルートが表示された(または最初のいくつかが表示され、その後パンくずリストがクリックされた)ことを意味します。パンくずリストのラベルの1つをクリックします。 // その後ろのすべての値が削除され、クリックして取得した値が this.levalList 配列に格納されます if (isBreadNumber) {
          // クリック後の情報をすべて削除し、localStorage のデータも削除します (ここでの削除は完全な削除ではなく、インターセプションです)。その後、次の情報を追加します。 // ここでの変更は、パンくずリストをクリックすることによっても発生する可能性があり、他の場所は通常、ルーティング ジャンプによって取得されることに注意してください。 // ここでの splice の使用方法に注意してください。localStorage.setItem に直接記述した場合、取得される値はインターセプトされた値であり、インターセプトされた値ではありません。 routerInfo.splice( newBreadNum,routerInfo.length-newBreadNum);
          window.localStorage.setItem("routerInfo",JSON.stringify(routerInfo));          
        } それ以外 { 
        
	      // 4.2 存在しない場合は、レベル 1 からレベル 2 にジャンプし、次にレベル 2 からレベル 3 にジャンプするなど、順番に実行されることを意味します。//localStorage に保存し、値を this.leavalList 配列に渡します。this.levelList.push({"name":newName,"path":newPath,"breadNumber":newBreadNum});
          window.localStorage.setItem("routerInfo",JSON.stringify(this.levelList));     
        }
        
      }
    }      
  },
  
  作成された(){
    パンくずを取得します。   
  }
}
</スクリプト>

<スタイル スコープ lang="scss">
.ボックスカード{
  下マージン: 20px;
}

</スタイル>

登録する

ここに画像の説明を挿入

コンポーネントをページの一部に表示し、一部には表示しない場合は、props を使用してパラメーターを渡す必要があります。
参考となる具体的な実践例:
(1)index.js内

<el-card class="box-card" v-show = "isShow">
エクスポートデフォルト{
小道具:{
       表示:{
          タイプ:ブール値、
          default:true //デフォルト値はtrueです。表示}
    }
}

(2)コンポーネントが呼び出されたとき

<crumbs :isShow=false></crumbs> //false はパンくずリストを表示しないことを意味します

メイン ナビゲーション バーを左側に表示する場合は、次のコードを追加します。
元のコード:

<el-breadcrumb セパレーター="/">  
   <el-breadcrumb-item v-for="(level,index) in this.levelList" :key="index" :to="level.path">
     {{レベル名}}
   </el-breadcrumb-item>
 </el-breadcrumb>
<el-ブレッドクラム項目>
  <a href="javascript:;">{{$route.matched[0].name}}</a>
</el-breadcrumb-item>

エレメントダイナミックルーティングブレッドクラムの実装例に関するこの記事はこれで終わりです。エレメントダイナミックルーティングブレッドクラムの関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VUE+elementui ブレッドクラムを使用した動的ルーティングの詳細な説明

<<:  MYSQL SERVER のログファイルを縮小する方法

>>:  Linux sedコマンドの使用

推薦する

WeChatアプレットはシンプルな手書き署名コンポーネントを実装します

目次背景:必要:効果1. アイデア2. 実装1. ページとスタイル2. 初期化3. クリックすると4...

JavaScript における 3 つの for ループ ステートメントの使用の概要 (for、for...in、for...of)

序文JS に触れるすべての開発者は、必然的に for ループを扱うことになります。結局のところ、fo...

Linuxのbasenameコマンドの使い方

01. コマンドの概要basename - ファイル名からディレクトリとサフィックスを削除しますba...

内部 IP アクセスのみを許可する Nginx プロキシ設定を追加する方法

位置 / { インデックス index.jsp; proxy_next_upstream http...

XHTML コードで Marquee タグを使用する方法

フォーラムで、ネットユーザーの jeanjean20 が、Marquee を標準に適合させる方法につ...

MySQL で左結合を使用して where 条件を追加する問題の詳細な分析

現在の需要:グループとファクターの 2 つのテーブルがあります。1 つのグループは複数のファクターに...

Nginx 逆生成 Mogilefs 分散ストレージ例の詳細な説明

1. 分散ストレージシステムの概要情報技術の継続的な発展により、利便性がもたらされる一方で、データ量...

1 つの記事で v-model とその修飾子を学ぶ

目次序文v-model の修飾子:怠け者トリム番号さまざまな入力タイプやその他の要素での v-mod...

Tomcat クラスローダーの実装方法とサンプルコード

Tomcat は内部的に複数の ClassLoader を定義し、アプリケーションとコンテナーが異な...

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

Reactベースのコンポーネントのカプセル化の実装手順

目次序文antd はどのようにしてコンポーネントをカプセル化するのでしょうか?ディバイダーコンポーネ...

Tomcat ソースコード起動コンソールの中国語文字化けのデバッグプロセス記録

問題を見つける今日はTomcatのソースコードを勉強するつもりなので、公式サイトからTomcatのソ...

MySQL 最適化ソリューション リファレンス

最適化によって発生する可能性のある問題最適化は必ずしも単純な環境で実行されるわけではなく、実稼働環境...

HTML 学習ノート - HTML 構文の詳細な説明 (必読)

1. HTML マークアップ言語とは何ですか? HTML は、Web ページの情報を表すマークアッ...

ローカル yum ソースの設定、国内 yum ソースの設定、epel ソースの設定を行う Linux の手順

1. ローカルyumソースを設定する1. ISOイメージをマウントする マウント -o loop /...