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

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

マスターするには: 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コマンドの使用

推薦する

IE アドレスバーのアイコン表示問題を解決する 3 つの手順

<br />この Web ページ制作スキル チュートリアルは、Web サイトのアイコンを...

Linux システムに docker をインストールし、ssh 経由で docker コンテナにログインする方法

注: 私はCentosを使ってdockerをインストールしていますステップ1: Dockerをインス...

MySQL の自動増分主キーが使い果たされた場合の対処方法

面接では、次のようなシナリオを経験する必要があります。インタビュアー: 「MySQL を使用したこと...

MySQL で explain ステートメントを使用する基本的なチュートリアル

目次1. 概要1. 説明文テスト2. 結果の各列の説明2. ID列の説明1. 環境整備2. expl...

IE6 での PNG アルファ透明度 (完全コレクション)

IE6 は PNG の透明度をサポートしていないと多くの人が言っています。実際、IE は 100%...

指定フィールドによるMySQLカスタムリストのソートの実装

問題の説明ご存知のとおり、MySQL でフィールドを昇順に並べ替える SQL は次のとおりです (i...

React プロジェクトにおける axios カプセル化と API インターフェース管理の詳細な説明

目次序文インストール導入環境の切り替え傍受を要求するレスポンスインターセプションAPIの統合管理要約...

SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...

MySQL マスタースレーブステータスチェックの実装

1. AデータベースとBデータベースの同期ステータスを確認する次のコマンドを入力すると多くの情報が表...

位置のいくつかの巧妙な応用の詳細な説明:sticky スティッキーポジショニング

背景: position:sticky はスティッキー配置とも呼ばれます。スティッキー配置の要素は、...

ウェブページのカラーマッチングにおけるオーバーラップとソフトカラーマッチングの手法を詳しく説明

この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...

myisamchk および mysqlcheck ツールを使用して破損した MySQL データベース ファイルを迅速に修復する方法

サーバーのデータベース ハード ディスク領域がいっぱいだったため、大量のデータの書き込みに失敗し、「...

jquery-multiselect を使用した IE6 のバグの解決方法

jquery-multiselect (ドロップダウン ボックスをチェックボックス付きの複数選択コン...

CSS 要約ノート: 変換、遷移、アニメーションの例

1.移行遷移プロパティの使用法: transition :transition-property t...

MySQL の主キーとトランザクションの詳細な説明

目次1. MySQLの主キーとテーブルフィールドに関するコメント1. 主キーと自動増分2. テーブル...