この記事では主にvue-routerのmatchedをベースにしたbreadcrumb機能を紹介し、皆さんと共有します。詳細は以下の通りです。 上の図に示すように、これは一般的なパンくず効果です。一般的に、パンくずの内容には一定の階層関係があります。上の図を例にとると、まずホームページに入り、次に左側のナビゲーションをクリックしてアクティビティ管理の下にあるアクティビティリストページに入り、次にデータをクリックしてアクティビティの詳細ページに入ります。 これは、vue-router の mached 属性によって得られる結果とまったく同じ原理なので、これに基づいてパンくず効果を実現できます。 ここでは、elementui のパンくずコンポーネントとナビゲーション メニュー コンポーネントを使用しました。最終的な効果の画像は次のとおりです。 ルーティング構成プロジェクト構造: サイドナビゲーションバーはホームページ、電子デジタル、衣料品、靴のページに表示されるので、レイアウトコンポーネントを作成し、これら3つのルートのコンポーネントをコンポーネントにポイントし、レイアウトコンポーネントにナビゲーションバーとパンくずリストを記述しました。 この機能の実装はルートの階層的なネスト関係に依存するため、事前にルートの構成を考えておく必要があります。ここでの私のルート構成は次のとおりです。 定数ルート = [ //空のルートに一致し、ルートルートにリダイレクトします{ パス:''、 リダイレクト: '/home', メタ:{ パンくずリストを表示:false } }, //ルートルート{ パス:'/home', コンポーネント: ()=>import('@/views/layout/index.vue'), 名前:'ホーム', メタ:{ タイトル:"ホーム", パンくずリストを表示:true } }, //電子デジタル{ パス:'/electronics', 名前:「電子デジタル」 コンポーネント: ()=>import('@/views/layout/index.vue'), リダイレクト: '/electronics/computer', メタ:{ タイトル:「電子デジタル」、 パンくずリストを表示:true }, 子供たち:[ { パス: 'コンピュータ', 名前:'コンピュータ', コンポーネント()=>import('@/views/electronics/children/computer/index.vue')、 メタ:{ タイトル:"コンピューター", パンくずリストを表示:true } }, { パス: '電話', 名前:「携帯電話」、 コンポーネント: ()=>import('@/views/electronics/children/phone/index.vue'), メタ:{ タイトル:「携帯電話」、 パンくずリストを表示:true } }, { パス:'tv', 名前:'テレビ', コンポーネント: ()=>import('@/views/electronics/children/tv/index.vue'), メタ:{ タイトル:"テレビ", パンくずリストを表示:true } } ] }, //衣類、靴、帽子{ パス:'/clothing', 名前:「衣類、靴、帽子」 コンポーネント: ()=>import('@/views/layout/index.vue'), リダイレクト: '/clothing/tops', メタ:{ タイトル: 「衣類、靴、帽子」 パンくずリストを表示:true }, 子供たち:[ { パス:'トップス', 名前:'トップス', コンポーネント: ()=>import('@/views/clothing/children/tops/index.vue'), メタ:{ タイトル:"トップス", パンくずリストを表示:true } }, { パス:'lower', 名前:'ボトムス', コンポーネント: ()=>import('@/views/clothing/children/lower/index.vue'), メタ:{ タイトル:"ボトムス", パンくずリストを表示:true } }, { パス:'靴', 名前:「靴」、 コンポーネント: ()=>import('@/views/clothing/children/shoes/index.vue'), メタ:{ タイトル:"靴", パンくずリストを表示:true } } ] }, //最後に配置します。前のすべてのルートが一致しない場合は、このルートが一致し、ルートルートにリダイレクトされます。{ パス:'*'、 リダイレクト:'/'、 メタ:{ パンくずリストを表示:false } }, ] ここでは、ホーム、エレクトロニクス、衣類、靴、帽子のルートを設定しました。これら 3 つは第 1 レベルのルートで、そのうちエレクトロニクス、デジタルと衣類、靴、帽子は第 2 レベルのルートです。メタでは、データをカスタマイズしました。ShowInbreadcrumb は、パンくずリストに表示するかどうかを決定するために使用されます。タイトルは、パンくずリストに表示される名前です。 ルーティング情報を取得するテンプレート部分: ///src/views/layout/index.vue <テンプレート> <div class="layout"> <!-- サイドナビゲーションバー --> <div class="サイドメニュー"> <el-メニュー デフォルトアクティブ="0" クラス="el-menu-vertical-demo" > <div v-for="(item,index) ルート内" :key="index" :index="index+''"> <!-- セカンダリメニューはありません --> <el-menu-item :index="index+''" v-if="!item.children"> <ルーターリンク:to="{name:item.name}">{{item.meta.title}}</ルーターリンク> </el-menu-item> <!-- セカンダリメニューあり --> <el-submenu :index="index+''" v-else> <テンプレート スロット="title">{{item.meta.title}}</テンプレート> <el-menu-item v-for="(item_,index_) in item.children" :key="index_" :index="index+'-'+index_"> <ルーターリンク:to="{name:item_.name}">{{item_.meta.title}}</ルーターリンク> </el-menu-item> </el-サブメニュー> </div> </el-menu> </div> <div class="content"> <!-- パンくずリスト --> <div class="パンくず"> <el-breadcrumb セパレータークラス="el-icon-arrow-right"> <el-breadcrumb-item v-for="(item,index) in breadcrumb" :key="index" :to="{ path: item.path}">{{item.meta.title}}</el-breadcrumb-item> </el-breadcrumb> </div> <!-- ルーティング終了 --> <ルータービュー></ルータービュー> </div> </div> </テンプレート> js部分: エクスポートデフォルト{ データ(){ 戻る { } }, 計算:{ // サイドナビゲーションデータルート(){ // $router.options からすべてのルーティング情報を取得し、フィルタリングしてこれを返します。$router.options.routes.filter((item)=>{ item.meta.showInbreadcrumb を返す }); }, // パンくずデータ breadcrumb(){ // ルート設定メタの showInbreadcrumb フィールドに従ってフィルタリングします。let matchedArr = this.$route.matched.filter((item)=>{ 戻り値 item.meta.showInbreadcrumb} ); // ホームページは特別なので、パンくずリストの最初に必ず表示する必要があります。ホームページのルーティング情報がない場合は、手動で先頭に追加します。if (matchedArr [0].meta.title !== 'Home Page') { 一致したArr.unshift( { パス:'/home', メタ:{ タイトル:"ホーム", パンくずリストを表示:true } }, ) } 一致したArrを返します。 }, } } 注: this.$route.matched を取得した後、結果に直接追加してフィルタリングすることはできません。そうしないと、ページが乱れてエラーが報告されます。最初にフィルタリングして新しい配列を返し、その後ホームページ情報を判断して追加する必要があります。 最終結果 これで、vue-router matched をベースにしたパンくずリスト機能の実装に関する記事は終了です。vue-router matched のパンくずリストに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: PIP で docker-compose をインストールする際のタイムアウト問題の解決方法
>>: MySQL 8.0.22 のインストールと設定方法のグラフィックチュートリアル
序文最近、フロントエンドの知識をまとめており、いくつかのインタビューにも参加しました。インタビュー中...
Dockerのインストール手順をスキップする1. postgresqlイメージを取得する docke...
最近VScodeのリモート開発機能をいじっています。Dockerのコンテナに接続できるほか、WSLに...
1. はじめに行ロックとテーブルロックの違いは面接で頻繁に出てくるはずです。MySQL のロックにつ...
序文MySQL データベースを使用する場合、クライアントはデータベース サーバーにリクエストを送信す...
今日、誰かがコードを調整するのを手伝っていたとき、次のようなスタイルを見つけました。 背景位置: 5...
Vueのコントロール商品数量コンポーネントのカプセル化と使用は参考までに。具体的な内容は以下のとお...
目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...
序文Boost ライブラリは、標準ライブラリのバックアップとして機能し、C++ 標準化プロセスの開発...
プロジェクトを開発しているとき、支払い済み、支払済み、クローズ済み、返金済みなどの注文ステータスなど...
キーワード 一般タイトルには、クラック、キー、シリアル番号、キージェネレータなどの単語を含めることは...
1. Yumのインストール yum でサブバージョンをインストール 2. 構成1. 倉庫を作る/ho...
I. はじめに1: SSL証明書私のドメイン名は Tencent Cloud にあります。第 3 レ...
目次1. インデックスの役割2. インデックスの作成と削除(1)ALTER TABLE文を使用して、...
1. プリコンパイルの利点私たちは皆、プリコンパイル機能を備えた JDBC の PreparedSt...