Vueは3段階のナビゲーション表示と非表示を実装します

Vueは3段階のナビゲーション表示と非表示を実装します

この記事では、3階層ナビゲーションの表示と非表示を実現するためのVueの具体的なコードを例として紹介します。具体的な内容は以下のとおりです。

要件の説明:

サイドバーの3階層ナビゲーションの表示と非表示を実現します。プライマリ ナビゲーションの 1 つをクリックすると、そのプライマリ ナビゲーションのセカンダリ ナビゲーションが表示され、クリックするとそのセカンダリ ナビゲーションが閉じます。プライマリ ナビゲーション内の他の項目については、セカンダリ ナビゲーションを展開します。他のプライマリ ナビゲーションのセカンダリ ナビゲーションを閉じます。

効果は以下のとおりです。

コード:

<テンプレート>
  <div id="アプリ">
    <img alt="Vue ロゴ" src="./assets/logo.png" />
    <HelloWorld msg="Vue.js アプリへようこそ" />
    <div class="first" v-for="(item, key) in navLists" :key="key">
      <li>
        <span @click="handleClick(キー)"> {{ item.title }}</span>
        <div
          v-for="(item2, key2) in item.child"
          :key="キー2"
          クラス="second"
          v-show="show2 && currIndex == キー"
        >
          <p @click="secondClick(key2)">{{ item2.subTitle }}</p>
          <div
            v-for="(item3, key3) in item2.threeChild"
            :key="キー3"
            クラス="3"
           v-show="show3 && currIndex2 == key2"
          >
            {{ item3.threeTitle }}
          </div>
        </div>
      </li>
    </div>
  </div>
</テンプレート>
 
<スクリプト>
「./components/HelloWorld.vue」からHelloWorldをインポートします。
 
エクスポートデフォルト{
  名前:「アプリ」、
  コンポーネント:
    こんにちは世界、
  },
  データ() {
    戻る {
      私: 0,
 
      表示3: 偽、
      表示2: 偽、
      navリスト: [
        {
          タイトル:「プロジェクト情報」、
          子供: [
            {
              サブタイトル:「プロジェクト紹介」
              サブタイトル: "#プロジェクト紹介",
              3人の子供: [
                { threeTitle: "3 レベルのナビゲーション" },
                { threeTitle: "3 レベルのナビゲーション" },
                { threeTitle: "3 レベルのナビゲーション" },
              ]、
            },
            {
              サブタイトル:「サンプル情報」、
              3人の子供: [
                { threeTitle: "3階層ナビゲーション22" },
                { threeTitle: "3階層ナビゲーション22" },
                { threeTitle: "3階層ナビゲーション22" },
              ]、
            },
 
            {
              サブタイトル:「サンプル情報」、
              3人の子供: [
                { threeTitle: "第 3 レベルのナビゲーション 33" },
                { threeTitle: "第 3 レベルのナビゲーション 33" },
                { threeTitle: "第 3 レベルのナビゲーション 33" },
              ]、
            },
          ]、
        },
        {
          タイトル:「プロジェクト情報2」
          子供: [
            {
              サブタイトル:「プロジェクト紹介22」
              3人の子供: [
                { threeTitle: "3 レベルナビゲーション 44" },
                { threeTitle: "レベル 3 ガイド 44" },
                { threeTitle: "第3レベルナビゲーション22" },
              ]、
            },
            {
              サブタイトル:「サンプル情報22」
            },
          ]、
        },
        {
          タイトル:「プロジェクト情報3」
          eタイトル: "#プロジェクトメッセージ",
          子供:
            {
              サブタイトル:「プロジェクト紹介33」
              サブタイトル: "#プロジェクト紹介",
            },
            {
              サブタイトル:「サンプル情報33」
              サブタイトル: "#sampleInformation",
            },
          ]、
        },
        {
          タイトル:「プロジェクト情報2」
          子供: [
            {
              サブタイトル:「プロジェクト紹介22」
            },
            {
              サブタイトル:「サンプル情報22」
            },
          ]、
        },
        {
          タイトル:「プロジェクト情報3」
          子供: [
            {
              サブタイトル:「プロジェクト紹介33」
            },
            {
              サブタイトル:「サンプル情報33」
            },
          ]、
        },
      ]、
 
      currIndex: "", //現在のインデックス spanIndex: [], //インデックス配列 arrIndex: "", //配列にインデックスを付けて現在のインデックスを見つけるかどうかを決定するために使用されます。 -1 は見つからなかったことを意味し、0 は見つかったことを意味します。
 
      currIndex2: "", //セカンダリナビゲーションの現在のインデックス spanIndex2: [], //インデックス配列 arrIndex2: "", //配列をインデックス付けして現在のインデックスを見つけるかどうかを決定するために使用されます。 -1 は見つからなかったことを意味し、0 は見つかったことを意味します。
    };
  },
  メソッド: {
    ハンドルクリック(インデックス) {
      // デフォルトでは表示されない第 3 レベルのナビゲーションを初期化します。
      this.show3 = false;
      this.spanIndex2.splice(-1, 1);
 
      // 現在のインデックス = インデックス
      this.currIndex = インデックス;
      console.log("現在のインデックス", index);
      // 現在のインデックスがインデックス配列 spanIndex 内にあるかどうかを判断します。 arrIndex に指定できる値は 2 つだけです: -1 が見つかりません。 0件見つかりました。
      this.arrIndex = this.spanIndex.indexOf(インデックス);
      console.log("arrIndex", this.arrIndex);
 
      (this.arrIndex == 0)の場合{
        //arrIndex == 0 の場合、インデックスが見つかり、インデックス配列 spanIndex 内のインデックスが削除され、セカンダリ ナビゲーションが非表示になります。
        this.spanIndex.splice(this.arrIndex、1);
        this.show2 = false;
      } それ以外 {
        // arrIndex ==-1、見つからない、splice(-1,1) は spanIndex 配列の末尾から 1 つの値を削除し、現在のインデックスをインデックス配列 spanIndex に追加します。show2 は true で、セカンダリ ナビゲーションを表示します。
        this.spanIndex.splice(this.arrIndex、1);
        this.spanIndex.push(インデックス);
        this.show2 = true;
      }
      
      console.log("インデックス配列", this.spanIndex);
    },
 
    secondClick(インデックス) {
      コンソールログ(インデックス);
      // 現在のインデックス = インデックス
      this.currIndex2 = インデックス;
      // 現在のインデックスがインデックス配列 spanIndex 内にあるかどうかを判断します。 arrIndex に指定できる値は 2 つだけです: -1 が見つかりません。 0件見つかりました。
      this.arrIndex2 = this.spanIndex2.indexOf(インデックス);
      console.log("arrIndex2", this.arrIndex2);
 
      (this.arrIndex2 == 0)の場合{
        //arrIndex == 0 の場合、インデックスが見つかり、インデックス配列 spanIndex 内のインデックスが削除され、セカンダリ ナビゲーションが非表示になります。
        this.spanIndex2.splice(this.arrIndex2、1);
        this.show3 = false;
      } それ以外 {
        // arrIndex ==-1、見つからない、splice(-1,1) は spanIndex 配列の末尾から 1 つの値を削除し、現在のインデックスをインデックス配列 spanIndex に追加します。show2 は true で、セカンダリ ナビゲーションを表示します。
        this.spanIndex2.splice(this.arrIndex2、1);
        this.spanIndex2.push(インデックス);
        this.show3 = true;
      }
       console.log("インデックス配列2", this.spanIndex2);
    },
  },
};
</スクリプト>
 
<スタイル>
p {
  パディング: 5px 0;
  マージンブロック開始: 0;
  マージンブロック終了: 0;
}
#アプリ {
  フォントファミリー: Avenir、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
。初め {
  幅: 200ピクセル;
  フォントサイズ: 24px;
  フォントの太さ: 太字;
  /* 高さ: 60px; */
  /* 背景:赤; */
}
.first:hover {
  カーソル: ポインタ;
 
  /* 色:赤; */
}
。2番 {
  フォントサイズ: 18px;
  フォントの太さ: 標準;
  背景: #eee;
  左マージン: 50px;
}
。三つ {
  背景: 黄色;
  左マージン: 20px;
  フォントサイズ: 14px;
}
</スタイル>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueで一部のルーティングページのナビゲーションバーを非表示にする機能を実装する
  • Vue ルーティング メタ セット ナビゲーションの非表示と表示機能のサンプル コード
  • Vue のボトムナビゲーションを動的に表示および非表示にする手法の分析

<<:  NavicatがMySQLに接続すると、10060、1045エラーとmy.iniの場所が報告されます。

>>:  Python Flask WeChat アプレットのログインプロセスとログイン API 実装コード

推薦する

Jenkins を通じて None のイメージを定期的にクリーンアップする方法

序文継続的なコード配信のプロセスで、Jenkins を利用して Docker イメージを作成すると、...

jQuery キャンバスは QR コード付きのポスターを生成します

この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...

MySQL トランザクションと分離レベルの基本原理の簡単な分析

目次序文1. 取引の基本原則の簡単な分析原子性:持続性分離:一貫性: 2. 分離レベルの基本原理の分...

MySQL は制限を使用してページング例メソッドを実装します

1. 制限の基本的な実装一般的に、クライアントは、pageNo (ページ番号) と pageSize...

MySQL データベースの一般的な基本操作の分析 [データベースの作成、表示、変更、削除]

この記事では、例を使用して、MySQL データベースの一般的な基本操作について説明します。ご参考まで...

JavaScript ES 新機能ブロックスコープ

目次1. ブロックスコープとは何ですか? 2. ブロックスコープが必要なのはなぜですか? 3. 関数...

JavaScript の onblur および onfocus イベントの詳細な説明

HTML ページでは、ボタンやテキスト ボックスなどの視覚要素にフォーカスを設定したり、フォーカスを...

Dockerでプロジェクトを実行する方法

1. プロジェクトwarが保存されているディレクトリを入力しますDockerfileを編集する vi...

jsはポップアップウィンドウをクリックすることでポップアップログインボックスを実装します

この記事では、ポップアップウィンドウをクリックしたときにポップアップログインボックスを実現するための...

TypeScript におけるインターフェースと型メソッドの正しい使用例

目次序文インタフェースタイプ付録: インターフェースとタイプの違い要約する序文インターフェースとタイ...

HTML テーブル タグ チュートリアル (34): 行スパン属性 ROWSPAN

複雑なテーブル構造では、一部のセルが水平方向に複数のセルにまたがるため、行間属性 ROWSPAN を...

MySQL でサーバーのインストールを開始できない場合の解決策について簡単に説明します。

コンピュータに初めて MySQL をインストールする場合、通常このエラー メッセージは表示されません...

開発にVscodeとdockerを組み合わせて使用​​する詳細なプロセス

序文Docker と VS Code を使用すると、ローカル開発環境全体を最適化し、プロジェクトの進...

Vueのシンプルな状態管理ストアモードを理解する方法

目次概要1. store.jsを定義する2. store.js を使用するコンポーネント3. 成果を...

mysql-8.0.15-winx64 解凍バージョンのインストールチュートリアルと終了する 3 つの方法

1.公式サイトからダウンロードして解凍する参考: 2. 環境変数を設定するMYSQL_HOMEをMy...