Vueドロップダウンメニューのコンポーネント開発の詳細説明

Vueドロップダウンメニューのコンポーネント開発の詳細説明

この記事の例では、Vueドロップダウンメニューのコンポーネント開発の具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

カスタムコンポーネントを作成します。非常にシンプルなドロップダウンメニュー、つまりアイデア全体です。

ステップ 1:プロジェクト内にカスタム コンポーネントを保存するためのフォルダーを作成します (コンポーネントの直下の common 内)

dropdown.vueは第一レベルのボックスです

dropdownMenu.vueはセカンダリボックスです

dropdownItem.vueはセカンダリボックスコンテンツです

ステップ2:

dropdown.vue の操作

<テンプレート>
  <div class="box">
     <!-- ボタンにクリック イベントを追加します -->
    <div @click="表示M">
          <!-- 第 1 レベルのボタン -->
      <スロット名="タイトル"></スロット>
    </div>
        <!-- セカンダリ ボックス -->
        
        <!-- 表示効果を非表示にするために v-if 操作を追加します -->
    <slot v-if="show" name="dropdown"></slot>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前:「ドロップダウン」、
    データ() {
      戻る {
        // デフォルトのセカンダリボックスは閉じられています show: false
      }
    },
    メソッド: {
      表示M() {
        this.show = !this.show
      },
      commitClick(値) {
      // ドロップダウン イベントを親に公開し、値を this.$emit('change-item',value) に渡します。
      }
    }
  }
</スクリプト>

<スタイルスコープ>
  。箱 {
    display: inline-block; /* インラインブロック */
    position: relative; /* 相対的な位置指定*/
    上:100ピクセル;
    左余白:100px
  }
</スタイル>

ドロップダウンメニューの場合は、ボックスとして扱います。スロットを追加してボックスを構築するだけです。

<テンプレート>
  <div class="ドロップダウンメニュー">
    <スロット></スロット>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前: "ドロップダウンメニュー"
  }
</スクリプト>

<スタイルスコープ>
  .ドロップダウンメニュー{
    padding: 8px 0; /* ボックスの内側の余白は上が 8px、左右が 0px です */
    border-radius: 4px; /* ボックスの角を丸くする*/
    border: 1px solid #f2f6fc; /* 境界線は 1px のグレーです*/
    position: absolute; /* 絶対位置指定*/
    right: 0; /* 右側 */
    top: 110%; /* ボックスはボタンの下にあります */
    background-color: #fff; /* 背景色は白です*/
    ボックスの影: 0 2px 4px rgba(0,0,0,0.12),0 0 6px rgba(0,0,0,.04);
    /* ボックスに影を追加します */
  }
</スタイル>

ドロップダウンアイテムの操作

<テンプレート>
  <div class="dropdown-item" @click="itemClick(値)">
    <スロット></スロット>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: "ドロップダウンアイテム",
  プロパティ:['値'],
  データ() {
    戻る {};
  },
  メソッド: {
    アイテムクリック(値) {
      // console.log(値)
      // 現在のコンポーネントの親の親、つまりドロップダウンの showM() メソッドを呼び出して、これを閉じます。this.$parent.$parent.showM();
      // 親の親 (ドロップダウン) の commitClick メソッドを呼び出し、値を渡します this.$parent.$parent.commitClick(value);
    },
  },
};
</スクリプト>

<スタイルスコープ>
 .ドロップダウン項目{
   line-height: 40px; /* 行の高さ 40px */
   white-space: nowrap; /* 改行なし*/
   padding: 0 20px; /* 内側の余白は上下が 0、左右が 20px です */
   color: #606266; /* フォントの色はグレーです*/
   カーソル: ポインター; /*マウスをクリックして移動します*/
 }
  .ドロップダウンアイテム:ホバー{
    color: #409eff; /* フォントの色は青です*/
    background-color: #ecf5ff; /* 背景色は明るい青にしてください*/
  }
</スタイル>

次にApp.vueファイルを操作します

<テンプレート>
  <div id="アプリ">
    <ドロップダウン @change-item="変更項目">
      <button slot="title">ボタン</button>
      <ドロップダウンメニュースロット="ドロップダウン">
        <dropdown-item value="食べ物">食べ物</dropdown-item>
        <dropdown-item value="ドリンク">ドリンク</dropdown-item>
        <dropdown-item value="再生">再生</dropdown-item>
      </ドロップダウンメニュー>
    </ドロップダウン>
  </div>
</テンプレート>

<スクリプト>
  './components/common/dropdown' からドロップダウンをインポートします
  「./components/common/dropdownMenu」からドロップダウンメニューをインポートします。
  「./components/common/dropdownItem」からdropdownItemをインポートします。
  エクスポートデフォルト{
    名前: 'アプリ'、
    コンポーネント:
      ドロップダウン、ドロップダウンメニュー、ドロップダウンアイテム
    },
    方法:{
      変更項目(e){
        コンソール.log(e)
      }

    }
  }
</スクリプト>

main.jsにコンポーネントをインポートする

「@/components/common/dropdown」からzgDropdownをインポートします。
「@/components/common/dropdownMenu」からzgDropdownMenuをインポートします。
「@/components/common/dropdownItem」からzgDropdownItemをインポートします。
Vue.component('zgDropdownItem',zgDropdownItem)
Vue.component('zgDropdown',zgDropdown)
Vue.component('zgDropdownMenu',zgDropdownMenu)

app.vueもそれに応じて変更する必要があります

<テンプレート>
  <div id="アプリ">
    <zg-dropdown @change-item="変更項目">
      <button slot="title">ボタン</button>
      <zg-dropdown-menu slot="ドロップダウン">
        <zg-dropdown-item value="食べ物">食べ物</zg-dropdown-item>
        <zg-dropdown-item value="ドリンク">ドリンク</zg-dropdown-item>
        <zg-dropdown-item value="再生">再生</zg-dropdown-item>
      </zg-ドロップダウンメニュー>
    </zg-dropdown>
  </div>
</テンプレート>

<スクリプト>
  エクスポートデフォルト{
    名前: 'アプリ'、
    方法:{
      変更項目(e){
        コンソール.log(e)
      }

    }
  }
</スクリプト>
<スタイルスコープ>

</スタイル>

大体こんな感じです。

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

以下もご興味があるかもしれません:
  • Vue ライフサイクルにおけるコンポーネント化をご存知ですか?
  • Vue コンポーネントの学習範囲を限定した詳細な説明
  • Vue コンポーネント開発に必須のスキル: コンポーネントの再帰
  • Vueコンポーネント化の基本的な使用方法の詳細
  • Vue コンポーネント化の一般的な方法: コンポーネント値の転送と通信
  • Vueのコンポーネント化を一緒に学びましょう

<<:  MySQL ログインおよび終了コマンドの形式

>>:  Zabbixを使用してMySQLを監視する方法

推薦する

MySQL 5.7.9 バージョンの sql_mode=only_full_group_by 問題を解決する

MySQL 5.7.9 バージョンの sql_mode=only_full_group_by の問題...

CSSカスケーディングメカニズムについての簡単な説明

CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...

Debian ベースの Linux システム ソフトウェア インストール コマンドの詳細な説明 (推奨)

Debian の紹介Debian は、広い意味では、フリーなオペレーティング システムの作成に専念...

Docker Compose のサイドカーモードの詳細な説明

目次Docker Composeとは要件に不適切な言語が使用されている実装Docker Compos...

Tik Tok サブスクリプション ボタンのアニメーション効果を実現する CSS

少し前にTik Tokを見ていて、フォローするときのボタンアニメーションがとても美しいと思ったのと、...

MySql8.0.19 インストールピットレコードを共有する

前回の記事ではMySql8.0.19のインストール手順を紹介しました。必要な方はクリックしてご覧くだ...

Linux サーバーに埋め込まれた ddgs および qW3xT.2 マイニング ウイルスの対処の実践記録

序文仮想通貨の狂気的な投機により、マイニングウイルスは犯罪者が最も頻繁に使用する攻撃方法の 1 つに...

MySQLのSQL文はインデックスを使用しません

インデックス集約を使用しない MySQL クエリご存知のとおり、インデックスを追加することはクエリ速...

CSS フレックスレイアウトのリストの最後の行を左揃えにする N 通りの方法 (要約)

張新旭氏の記事を引用して皆さんにシェアしたいと思います。 変更を加えたい場合は、対応する画像によって...

ネイティブJSを使用した遅延読み込みlazyLoadの3つの方法の概要

目次序文方法1: 高コントラスト方法2: getBoundingClientRect() APIを使...

JS の配列トラバーサルについて、一般的なループをいくつ知っていますか?

序文基本的なデータ構造として、配列とオブジェクトはさまざまなプログラミング言語で重要な役割を果たしま...

IE ラベル LI テキスト折り返し問題について

私は長い間この問題に悩まされていましたが、検索してみたところ、実際にこの問題を解決した人がいることが...

Linux ディスク パーティションの実装の原理と方法の分析

覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...

検証コード干渉を実装する js (動的)

この記事の例では、検証コードの動的干渉を実装するためのjsの具体的なコードを共有しています。具体的な...

MySQL での SQL モードの表示と設定の詳細な説明

MySQL での SQL モードの表示と設定MySQL はさまざまなモードで実行でき、さまざまなシナ...