Vue+Element UIはドロップダウンメニューのカプセル化を実現します

Vue+Element UIはドロップダウンメニューのカプセル化を実現します

この記事の例では、ドロップダウンメニューのカプセル化を実装するためのVue + Element UIの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

1. レンダリング

まずレンダリングを投稿します。メニュー項目にはスタイルが設定されておらず、画像には境界線が表示されていません (境界線は外側のコンテナーの境界線です)。必要に応じて、他のスタイルを変更できます。

2. コンポーネントのパッケージング

コンポーネントのカプセル化には、CSSアニメーション、配置、およびElement UIが提供するドロップダウンメニューコンポーネントel-dropdownを使用します。コードは次のとおりです。

<テンプレート>
  <div class="all" @click="clickFire">
    <span class="item-border">
      <el-image
        クラス="アイテム"
        スタイル="幅: 24px; 高さ: 24px"
        fit="カバー"
        :lazy="isLazy"
        :src="アイテムプロパティ.url"
        :title="アイテムプロパティ名"
        :placeholder="itemProperty.name"
      </el-image>
    </span>
    <div class="wrap-item"></div>
    <!-- ドロップダウン メニュー -->
    <el-dropdown class="dropMenu" @command="handleCommand">
      <span class="el-dropdown-link" v-text="itemProperty.name"></span>
      <el-dropdown-menu スロット="ドロップダウン" クラス="dropMenuitems">
        <!-- <el-dropdown-item>ゴールデンケーキ</el-dropdown-item>
        <el-dropdown-item>ライオンの頭</el-dropdown-item>
        <el-dropdown-item>カタツムリライスヌードル</el-dropdown-item> -->
        <el-ドロップダウン項目
          class="ドロップメニュー項目"
          v-for="(item, index) in itemProperty.menus"
          :key="インデックス"
          :command="アイテム"
          >{{ 項目 }}</el-dropdown-item
        >
      </el-dropdown-menu>
    </el-dropdown>
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  小道具: {
    項目プロパティ: オブジェクト、
    必要: true、
  },
  データ() {
    戻る {
      isLazy: true、
      アイテム:
        名前: 'アイテム',
        url: require('../../../static/imgs/menus/warning.png'),
        メニュー: [
          'サブメニュー-1',
          'サブメニュー2',
          'サブメニュー3',
          'サブメニュー-4',
          'サブメニュー-5',
        ]、
      },
    }
  },
  マウント() {
    this.$data.item = this.$props.itemプロパティ
    // console.log(this.$props.itemProperty)
  },
  メソッド: {
    //親アイコンクリックイベント clickFire() {
      //パラメータ 1: 親コンポーネントで呼び出して親子コンポーネントの値転送をトリガーできるカスタム コンポーネント イベント。パラメータ 2: 親コンポーネントに渡されるデータ [配列形式にすることができます]
      this.$emit('clickItem', this.$data.item)
    },
    //ドロップダウンメニューのクリックイベント handleCommand(command) {
      // console.log(コマンド)
      this.$emit('handleCommand', コマンド)
    },
  },
}
</スクリプト>
<style lang="less" スコープ>
。全て {
  // 境界線: 1px ソリッドスカイブルー;
  表示: インラインブロック;
  位置: 相対的;
  幅: 65px;
  高さ: 65px;
  // オーバーフロー: 非表示;
}
// 最も内側のlayer.item-border {
  表示: インラインブロック;
  マージン: 0 自動;
  左マージン: 0px;
  上マージン: 10px;
  幅: 44px;
  高さ: 44px;
  境界線の半径: 50%;
  境界線: 3px 実線スカイブルー;
  // 背景色: スレートブルー;
  。アイテム {
    位置: 絶対;
    上位: 50%;
    左: 50%;
    変換: translate(-50%, -50%);
  }
}

// 最も外側のレイヤー.wrap-item {
  位置: 絶対;
  上: 0;
  左: 0;
  表示: インラインブロック;
  幅: 56px;
  高さ: 56px;
  境界線: 5px の透明な点線;
  左境界線: 5px 点線 #73ffff;
  左境界線の幅: 3px;
  右境界線の色: #73ffff;
  境界線上部の色: 透明;
  境界線の半径: 50%;
  // 背景色: バーリーウッド;
  アニメーション: 3 秒間の無限直線の円。
}
@keyframes 円 {
  0% {
    変換: 回転(0度);
  }

  100% {
    変換: 回転(-360度);
  }
}
//ドロップダウンメニュー.dropMenu {
  上マージン: 5px;
  // 背景色: 黄緑;
  色: #fff;
  //タイトル item.el-dropdown-link {
    カーソル: ポインタ;
  }
  //メニューサブ項目.el-dropdown-menu__item {
    色: 赤 !重要;
  }
  .dropMenu-item {
    背景色: ローズブラウン;
  }
}
</スタイル>

3. 親コンポーネントでの使用例

<テンプレート>
    <!-- 機能モジュール: サブコンポーネントを使用する - カスタム イベント clickItem と handleCommand に注意してください -->
    <div class="funcModules">
      <リングアイテム
        クラス="リングアイテムスタイル"
        v-for="(item, index) in funcItems"
        :key="インデックス"
        :itemProperty="アイテム"
        @clickItem="クリックリングアイテム"
        @handleCommand="ハンドルコマンドドロップメニュー"
      />
    </div>
</テンプレート>
<スクリプト>
//1-サブコンポーネントをインポートします。import RingItem from '../Controls/RingItem'
エクスポートデフォルト{
  コンポーネント:
  //2-コンポーネントRingItemを登録します。
  },
  データ() {
    戻る {
      //関数モジュールアイコンリソース funcItems: [
        {
          名前:「システム管理」
          url: require('../../../static/imgs/menus/management.png'),
          メニュー: ['詳細管理', '会社概要'],
        },
      ]、
    }
  },
  メソッド: {
    /**
     * RingItem サブコンポーネントのクリック イベント: 値はサブコンポーネントの発行によって渡される値です */
    クリックリングアイテム(値) {
      //サブコンポーネントのname属性値を判断し、対応するビジネスロジックを実装する switch (value.name) {
        ケース「システム管理」: {
          console.log('システム管理')
          //ページジャンプ管理センターを実行します(必要に応じてビジネスロジックを追加します)
          //this.$router.push({ パス: '/admincenter' })
          壊す
        }
      }
    },
    /**
     * RingItem サブコンポーネント: ドロップダウン メニューのクリック イベント (値はサブコンポーネントの発行によって渡される値です)
     */
    handleCommandDropMenu(値) {
      console.log(値)
       スイッチ (値.名前) {
        ケース「詳細管理」: {
          console.log('システム管理')
          //ページジャンプ管理センターを実行します(必要に応じてビジネスロジックを追加します)
          //this.$router.push({ パス: '/admincenter' })
          壊す
        }
         ケース「会社概要」: {
          console.log('システム管理')
          //ページジャンプ管理センターを実行します(必要に応じてビジネスロジックを追加します)
          //this.$router.push({ パス: '/admincenter' })
          壊す
        }
      }
    },
  },
}
</スクリプト>
<style lang="less" スコープ>
//スタイル調整</style>

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

以下もご興味があるかもしれません:
  • vue+elementui+vuex+sessionStorage を使用して履歴タグ メニューを実装するためのサンプル コード
  • Vue.jsはElement-uiを使用してナビゲーションメニューを実装します
  • Vueはメニューナビゲーションを実装するためにelement-uiを使用します
  • Vue+element-ui はカスタム右クリックメニューメソッドの例を追加します
  • Vue + Element UIは権限管理システムのメニュー機能実装コードを実装します

<<:  Idea は、Web プロジェクトを開始するように Tomcat を設定します。グラフィック チュートリアル

>>:  Django がローカル MySQL データベースに接続する手順 (pycharm)

推薦する

Vue は無限ロードウォーターフォールフローを実装します

この記事では、参考までに、無限ロードウォーターフォールフローを実現するためのVueの具体的なコードを...

docker システムコマンドセットの使用

目次docker システム df docker システム プルーンdocker systemc 情報...

初めてDockerイメージを構築、実行、公開、取得するための詳細な手順

1. はじめに以前は、Python アプリケーションの作成を開始したい場合、最初のステップはマシンに...

Vue はシームレスなカルーセル効果 (マーキー) を実現します

この記事では、シームレスなカルーセル効果を実現するためのVueの具体的なコードを例として紹介します。...

30 種類の無料の高品質英語リボンフォント

30 種類の高品質な英語リボン フォントを無料でダウンロードできます。デザイナーは常に、25 種類の...

クラウドサーバーを購入し、Alibaba Cloud に Pagoda Panel をインストールする手順

アリババクラウドがサーバーを購入クラウドサーバーを購入し、サーバーバージョンとしてcentos 7....

Tomcatが親の委任メカニズムを破壊する方法についての簡単な説明

目次JVM クラスローダーTomcat クラスローダークラスを検索ロードクラスクラスをロードしようと...

Linux での MySql centos7 のバイナリコンパイルとインストールに関するチュートリアル

// これをインストールするのに丸一日かかったので、記録するためにメモを書きました。 //何か問題が...

CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

実稼働環境で起こる最も嬉しいことは、シナリオによっては、更新または削除時にパラメータを無視せざるを得...

無料のパブリック STUN サーバー

無料のパブリック STUN サーバーSIP 端末がプライベート IP アドレスを使用する場合、スタン...

CSS calc() の数式に関する詳細な理解

数式 calc() は CSS の関数であり、主に数学演算に使用されます。 calc() を使用する...

MySQL での一時テーブルの使用例

ここ2日間ちょっと忙しくて、公式アカウントも数日更新が止まってしまいました。その結果、何人かの読者か...

JavaScript でオブザーバー パターンを実装する方法

目次概要オブザーバーパターンの応用シナリオオブザーバーパターンの実装要約する概要オブザーバー パター...

Gokudōゲームにおけるフロントエンド知識のまとめ

背景日本語を学び始めた当初は、日本語の50音を覚えるのは簡単ではなく、特にカタカナを覚えるのは困難で...