Vueは、サイドナビゲーションバーをタブページに関連付けるサンプルコードを実装します。

Vueは、サイドナビゲーションバーをタブページに関連付けるサンプルコードを実装します。

テクノロジースタック

  • サイドバー用
  • Antdtabは要素を使用します

効果

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

<テンプレート>
	  <div class="メインカード">
          <el-行>
            <el-col :span="3">
              <div class="menu-all">
                <div class="menu-head">
                  <span class="menu-head-title">倉庫管理</span>/<span class="menu-head-title" @click="goBack"
                    >大画面</span>
                  >
                </div>
                <!-- <div class="menu-body">
                <div class="menu-item" @click="openTabs(item)" v-for="menuItems 内の項目" :key="item">
                  <i class="el-icon-s-home" v-if="item.value === '01'"></i>{{ item.name }}
                </div>
              </div> -->
                <a-メニュー
                  モード="インライン"
                  テーマ="ダーク"
                  :openKeys="オープンキー"
                  v-model="選択されたキー"
                  @openChange="onOpenChange"
                >
                  <a-sub-menu v-for="メニュー項目内の項目" :key="item.value">
                    <span スロット="タイトル"
                      ><a-icon type="appstore" /><span>{{ item.name }}</span></span
                    >
                    <メニュー項目
                      v-for="item.children 内の childrenItem"
                      :key="子アイテム.値"
                      @click="addTabs(childrenItem)"
                      >{{ childrenItem.name }}
                    </a-メニュー項目>
                  </a-サブメニュー>
                </a-メニュー>
              </div>
            </el-col>
            <el-col :span="21">
              <el-行>
                <el-col :span="24">
                  <div>
                    <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
                      <el-tab-pane v-for="編集可能なタブ内の項目" :key="item.name" :label="item.title" :name="item.name">
                        <コンポーネント :is="item.content"></コンポーネント>
                      </el-tab-pane>
                    </el-tabs>
                  </div>
                </el-col>
              </el-row>
            </el-col>
          </el-row>
        </div>
</テンプレート>
<スクリプト>
	エクスポートデフォルト{
		データ(){
			戻る {
				   openKeys: [], //第一レベルメニューの折りたたみと展開を制御して、第一レベルメニューの値を保存します
      SelectedKeys: '', //セカンダリメニューを制御して、セカンダリメニューの値を強調表示して保存します
      //サイドナビゲーションメニュー配列 menuItems: [
        {
          名前: 「受信レポートと送信レポート」
          値: '0'、
          子供たち: [
            {
              名前: 「受注数量レポート」
              値: '01'、
              コンテンツ: () => import('@/views/main/index/qtyReportIndex.vue'),
            },
            {
              名前: '保管するユニット数に関するレポート'、
              値: '02'、
              コンテンツ: () => import('@/views/main/index/qtyReportIndexQty.vue'),
            },
            {
              名前: 「出荷予定の注文数量レポート」
              値: '03'、
              コンテンツ: () => import('@/views/main/index/handoverReportIndex.vue'),
            },
            {
              名前: 「出荷予定ユニット数レポート」
              値: '04'、
              コンテンツ: () => import('@/views/main/index/handoverReportIndexQty.vue'),
            },
          ]、
        },
        {
          名前: 「予測」、
          値: '1'、
          子供たち: [
            {
              名前: 「到着登録」
              値: '11'、
              コンテンツ: () => import('@/views/main/index/asnHdrDockIndex.vue'),
            },
            {
              名前:「倉庫利用率」
              値: '12',
              コンテンツ: () => import('@/views/main/index/whUteIndex.vue'),
            },
            {
              名前: 「倉庫内の在庫」
              値: '13',
              コンテンツ: () => import('@/views/main/index/imOdsStorageIndex.vue'),
            },
          ]、
        },
        {
          名前: 'インジケーター'、
          値: '2'、
          子供たち: [
            {
              名前: 「単一倉庫集荷率」
              値: '201',
              コンテンツ: () => import('@/views/main/index/singleWhDeliveryScaleIndex.vue'),
            },
            {
              名前: 「倉庫内の輸送時間」
              値: '202',
              コンテンツ: () => import('@/views/main/index/transitDurationInWhIndex.vue'),
            },
            {
              名前: 'SN の繰り返し'、
              値: '203',
              コンテンツ: () => import('@/views/main/index/dwExceptionBarcodeIndex.vue'),
            },
            {
              名前: 「日次在庫リスト」
              値: '204',
              コンテンツ: () => import('@/views/main/index/inventoryRqIndex.vue'),
            },
            {
              名前: 「データベース転送インジケーター監視」
              値: '205',
              コンテンツ: () => import('@/views/main/index/transferIndexIndex.vue'),
            },
            {
              名前: 「ピッキング場所分析概要レポート」
              値: '206',
              コンテンツ: () => import('@/views/main/index/pickingByLocSumIndex.vue'),
            },
            {
              名前: 'レポートの概要を読み込んでいます',
              値: '207',
              コンテンツ: () => import('@/views/main/index/loadingSummaryIndex.vue'),
            },
            {
              名前: '送信SNエラー率'、
              値: '208',
              コンテンツ: () => import('@/views/main/index/dwBarcodeErrorRptIndex.vue'),
            },
            {
              名前: 「ピッキング場所分析の詳細」
              値: '209',
              コンテンツ: () => import('@/views/main/index/dwPickFxmxIndex.vue'),
            },
            {
              名前: 'バッチピッキングに基づかない保管エリアディメンション'、
              値: '210',
              コンテンツ: () => import('@/views/main/index/notPickingByBatchIndex.vue'),
            },
          ]、
        },
      ]、
      editableTabsValue: '', //タブページ上で現在アクティブな項目
      editableTabs: [], //タブページ配列 }
		},
		方法:{
	// 他のページからホームページにジャンプしてタブページを開くために使用されるメソッド // goTable(item) {
     // this.openKeys = [item.value.substring(0, 1)]
     // this.SelectedKeys = item.value
     // this.$store.commit('updateHomeOrIndexSwitch', false)
     // this.openTabs(アイテム)
    //,
		タブを追加(アイテム) {
      onOff を false にします。
      this.editableTabs.forEach((x) => {
        if (x.name == item.name) {
           this.editableTabsValue = アイテム名
           オンオフ=true
           戻る;
        }
      })
      if(!onOff){
      this.editableTabs.push({
        タイトル: アイテム名、
        名前: アイテム名、
        コンテンツ: アイテム.コンテンツ、
      })
      this.editableTabsValue = アイテム名
      }
    },
    //タブページを閉じてトリガーする targetName = item.name
    削除タブ(ターゲット名) {
      タブを this.editableTabs とします
      activeName = this.editableTabsValue とします
      アクティブ名 === ターゲット名の場合 {
        tabs.forEach((タブ、インデックス) => {
          if (tab.name === targetName) {
            nextTab = tabs[index + 1] || tabs[index - 1]とします
            if (次のタブ) {
              アクティブ名 = 次のタブ名
            } それ以外 {
              this.openKeys = []
              this.SelectedKeys = ''
            }
          }
        })
      }
      this.editableTabsValue = アクティブ名
      this.editableTabs = tabs.filter((tab) => tab.name !== targetName)
    },
		},
		時計:{
			    編集可能なタブ値(val) {
      this.menuItems.forEach((メニュー項目) => {
        メニュー項目の子の場合
          メニュー項目.children.forEach((childrenItem) => {
            if (childrenItem.name === val) {
              this.openKeys = [childrenItem.value.substring(0, 1)]
              this.SelectedKeys = childrenItem.value
              戻る
            }
          })
        }
      })
    },
		}
	}
</スクリプト>

分析する

このコンポーネント セットは、単一の要素フレームワークでは実装できません。サイド ナビゲーション バーでは、折りたたみ、強調表示、メニュー グループのパラメーターを制御する必要があります。メニュー グループの折りたたみと展開を制御する要素のナビゲーション メニューのパラメーターは関数 @open control であるため、コードを通じてメニュー グループの展開と折りたたみを制御する方法がないため、フレームワーク全体でそのような関数を作成して記録します。

ここに画像の説明を挿入

これで、Vue のサイドナビゲーションバーとタブページの関連付けの実装のサンプルコードに関するこの記事は終了です。Vue のサイドナビゲーションバーとタブページの関連付けに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています
  • vue elementUIはタブを使用してナビゲーションバーにリンクします
  • Vue カスタム下部ナビゲーションバー タブバー実装コード
  • モバイル慣性スライド&リバウンドVueナビゲーションバーコンポーネントly-tabを書く

<<:  ウェブデザイナーが注意すべき 43 のウェブデザインの間違い

>>:  iframe の src を about:blank に設定した後の詳細

推薦する

高度な JavaScript フロントエンド開発でよく使用されるいくつかの API の例の詳細な説明

目次ミューテーションオブザーバーAPI特徴インターセクションオブザーバーAPI例えば画像の遅延読み込...

Vue開発ウェブサイトSEO最適化方法の詳細な説明

ページデータの表示には Vue などの js のデータバインディング機構が使用されるため、クローラー...

MySQL 最適化戦略 (推奨)

要約すれば: 1. データベースの設計とテーブルの作成時にパフォーマンスを考慮する2. SQLの記述...

JavaScript プロトタイプの詳細

目次1. 概要1.1 プロトタイプとは何ですか? 1.2 プロトタイプを入手する2. プロトタイプの...

CSSスタイルの記述順序と命名規則と注意事項

書き順の重要性ブラウザのリフローを減らし、ブラウザのDOMレンダリングパフォーマンスを向上させる①:...

読み込み進捗バーのネイティブ JS 実装

この記事では、ネイティブ JS によって実装された動的読み込みプログレス バーの特殊効果を紹介します...

Linux での SSH 非秘密通信の実装

SSHとは何か管理者はリモートでログインして、インターネット経由で接続されたさまざまな場所にある複数...

Redux Toolkit で Redux を簡素化する方法

目次Redux Toolkitが解決する問題何が含まれていますか? Redux Toolkit AP...

モバイルデバイスで 1 ピクセルの境界線の問題を解決するいくつかの方法 (5 つの方法)

この記事では、モバイルデバイス上の 1 ピクセルの境界線の問題を解決する 5 つの方法を紹介します。...

Mysqlトランザクション処理の詳細な説明

1. MySQLのトランザクションの概念MySQL トランザクションは主に、操作量が多く複雑度の高い...

Docker による Oracle 11g イメージ構成のプルに関する詳細なチュートリアル

さっそくAlibaba の oracle11g イメージをプルして構成する docker の記録を開...

MySQL 5.6 ルートパスワード変更チュートリアル

1. MySQL 5.6をインストールした後、正常に有効化できないMySQL の圧縮バージョンは、解...

Docker MQTT のインストールと使用のチュートリアル

MQTT の紹介MQTT (Message Queuing Telemetry Transport)...

overflow:autoの使い方の詳しい説明

本文に入る前に、オーバーフローとフレックスレイアウトの使い方をいくつか紹介します。 overflow...

Redhat 7.3 に MySQL 8.0.22 をインストールするための詳細なチュートリアル (バイナリ インストール)

目次1. MySQLインストールパッケージをダウンロードする2. MySQLのアンインストール手順3...