要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

この記事では主に以下について説明します: カスタムツリーコントロール<el-tree>

要件:

Element UI 公式 Web サイトで提供されるツリー コントロールには、次のような基本、選択可能、カスタム ノード コンテンツ、ノード フィルタリング、ドラッグ可能なノード ツリー構造が含まれます。

ここに画像の説明を挿入

私が求めている効果は、検索効果をサポートするツリーです。マウスをホバーすると、追加アイコンと変更アイコンが表示されます。アイコンをクリックすると、対応するページがポップアップ表示され、各フォルダーの前にカスタムアイコンが追加されます。

結果:

ここに画像の説明を挿入

実装手順:

1. スロットを使用する

<el-col :span="4" :xs="24">
   <!--ディレクトリ検索機能-->
  <div class="head-container">
    <el-入力
      v-model="dirNameCn"
      placeholder="ディレクトリ名を入力してください"
      クリア可能
      サイズ="小"
      プレフィックスアイコン="el-icon-search"
      スタイル="マージンボトム: 20px"
    />
  </div>
  <!--ツリー表示-->
  <div class="head-container">
    <el-tree
      :data="dirTreeオプション"
      :props="デフォルトプロパティ"
      :クリック時にノードを展開="false"
      :filter-node-method="filterNode"
      ref="木"
      デフォルトすべて展開
      @node-click="ハンドルNodeClick"
      icon-class="el-icon-folder-opened"
      ノードキー="id"
      :クリック時にチェックするノード="true"
    >
      <!-- 非表示の新しいアイコン -->
      <span class="custom-tree-node" slot-scope="{ node, data }" @mouseenter="mouseenter(data)" @mouseleave="mouseleave(data)">
        <span>{{ ノード.ラベル }}</span>
        <div>
          <i v-show="data.show" class="el-icon-circle-plus" style="color: #00afff" @click="addDial(node, data)"/>
          <!--非表示のドロップダウン選択-->
          <el-dropdown トリガー="クリック" 配置="右" @command="(コマンド) => {handleCommand(コマンド)}">
            <i v-show="data.show" class="el-icon-more" style="color: #D3D3D3"/>
            <el-dropdown-menu slot="ドロップダウン">
              <el-dropdown-item command="a">名前の変更</el-dropdown-item>
              <el-dropdown-item command="b">削除</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
        </div>
      </span>
    </el-tree>
  </div>
</el-col>

2. コンポーネントに対応するJS

注: ツリーデータはバックエンドからクエリされ、 dirTreeOptionsに保存されます。

<スクリプト>
  エクスポートデフォルト{
    名前: 'reqmdoctree',
    データ() {
      戻る {
        // 左の検索ボックスの内容 dirNameCn: '',
       	// ディレクトリツリーオプション dirTreeOptions: undefined,
        デフォルトプロパティ: {
          子供: 「子供」、
          ラベル: "ラベル"
        },
        //ツリーメニューに子ノードがあるかどうか yesChild: undefined,
        // 左側に新しく追加されたプロンプト情報ボックスを制御する show: 0,
        // クエリ要件ドキュメント情報パラメータ queryParams: {
          docNo: undefined, // 文書番号 docNameEn: undefined, // 文書の英語名 dirNo: undefined, // ディレクトリ番号 current: 1, // 現在のページ サイズ: 20 // ページあたりに表示される項目数 },
        ツリーID: 未定義、
      }
    },
    メソッド: {
      /** 必要なディレクトリのドロップダウンツリー構造を照会します*/
      getTreeSelect() {
        treeselect().then(応答 => {
          this.dirTreeOptions = レスポンス.データ
        })
      },
      // 検索値はフィルターです function filterNode(value, data) {
        if (!value) が true を返す
        data.label.indexOf(値) !== -1 を返します
      },
      // ノードがクリックされたときのコールバック関数 handleNodeClick(data) {
        // コンソール.log(データ)
        this.treeId = データID
        this.yesChild = data.children
        this.queryParams.dirNo = データ ID
        このリストを取得する()
      },
      //ツリー内の3つのポイントのイベント handleCommand(command) {
        if (コマンド == 'a') {
          selectReqNo(this.treeId).then(応答 => {
            this.uuid = 応答.msg
            getObjTree(response.msg).then(response => {
              this.form = レスポンスデータ
              this.open = true
              this.title = '要件ドキュメントディレクトリ構成テーブルを変更する'
            })
          })
        }
        if (コマンド == 'b') {
          if (this.yesChild != 未定義) {
            this.$notify.error({
              タイトル: 「警告」
              メッセージ: 「このディレクトリには他のフォルダがあります」
            })
          } それ以外 {
            selectReqNo(this.treeId).then(応答 => {
              this.uuid = 応答.msg
              this.$confirm('ID ' + this.uuid + ' のデータ項目を削除してもよろしいですか?', '警告', {
                confirmButtonText: '確認'、
                cancelButtonText: 'キャンセル'、
                タイプ: '警告'
              })。そして()=>{
                delObjTree(this.uuid) を返します
              })。次に、データ => {
                この.getTreeSelect()
                this.msgSuccess('正常に削除されました')
              }).catch(関数() {
              })
            })
          }
        }
      },
      // 左側に新しいディレクトリ/ファイルを作成する addDial(node, data) {
        // console.log(ノード、'---'、データ)
        this.reset()
        this.form.dirParentId = データ.id
        this.open = true
        this.title = '要件ドキュメントディレクトリ構成テーブルを追加する'
      },
      // マウスを左に置いたときにアイコンを表示する mouseenter(data){
        this.$set(データ、'表示'、true)
      },
      // マウスの左ボタンが離れるとアイコンは表示されません。mouseleave(data){
        this.$set(データ、'表示'、false)
      },
      //ここで新しいリソースのポップアップ ウィンドウを開きます......
    }
  }
</スクリプト>

例:

参照ドキュメント: 要素 UI、ツリー コントロール統合ドロップダウン選択

これで、アイコン付きのドロップダウン メニューを統合した Element ツリー コントロール (ツリー + ドロップダウン + 入力) に関するこの記事は終了です。アイコン付きの Element ドロップダウン メニューに関連するその他のコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • el-tree での不完全なテキスト表示の解決策
  • 面接では、Set 実装クラス: TreeSet について質問する必要があります。
  • 完全なコードによる KDTree の C++ 実装
  • JDK コレクション ソースコード解析 TreeMap (パート 2)
  • JDK コレクション ソースコード解析 TreeMap (I)
  • ConcurrentHashMap の解析: 赤黒木プロキシ クラス (TreeBin)
  • antd ツリーと親子コンポーネント間の値転送問題について (React のまとめ)
  • C# TreeNode ケーススタディ

<<:  MySQL インデックスの左端原則のサンプルコード

>>:  Excel ファイルを MySQL データベースにインポートする方法

推薦する

Vueでaxiosをカプセル化する方法

目次1. インストール1. はじめに3. インターフェースルートアドレス4. 使用例4.1 ダウンロ...

CSS を使用して 3 列レイアウトを実装するサンプル コード。中央の列は適応型で、テキスト サイズに応じて幅が変わります。

Baiduのインタビューで遭遇する質問は、次のレイアウト効果を達成する必要がある。 中央の紫色の列...

FTP環境設定ソリューション(vsftpd)の詳細な説明

1. vsftpdコンポーネントをインストールするインストールコマンド: [root@ink4t ~...

MySql 8.0.16 バージョンのインストールでは、「UTF8B3」ではなく「UTF8B4」が使用されるように求められます。

MySQL 8.0.16 にインストールする場合、「UTF8B3」ではなく「UTF8B4」が使用さ...

Vueでアイコンをカスタマイズする手順

ant-design-vue は Ali iconfont icons の使用をカスタマイズします\...

背景画像に CSS3 変換を適用するためのソリューション

CSS 変換は便利ですが、背景画像にはまだ適用されていません。この投稿では、背景画像を回転させたい場...

vue.js を使用してドラッグ アンド ドロップ機能を実装する方法

序文ドラッグ アンド ドロップ機能を追加すると、プログラムがより自然でユーザーフレンドリーになります...

フロントエンドJavaScriptの動作原理

目次1. JavaScript エンジンとは何ですか? 2. V8エンジン3. ランタイム環境4. ...

nginx クッキーの有効期間に関する議論の要約

訪問するたびにブラウザにCookieが生成されますが、 Cookieの存在はユーザーにとって良いこと...

Dockerイメージをプルしてバージョンを確認する方法

イメージのバージョンとタグを確認するには、docker hubで確認する必要があります。アドレスは次...

コード分​​析を実現するためのFastDFSとNginxの統合

FastDFSとNginxの統合:トラッカーは、負荷分散と高可用性のために Nginx と組み合わせ...

ウェブサイトのデザインを改善するための役立つ提案を提供します

<br />ウェブサイトを科学的にデザインする: アイトラッキング研究から学ぶ 23 の...

ナビゲーションバーコンポーネントをVueでカプセル化する

はじめに:ナビゲーション バーなどのコンポーネント ベースのアイデアを使用して機能モジュールを完全に...

インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明

この記事の著者@子木yoyoが個人ブログに投稿したものです。 Web ページでもモバイル アプリでも...

Mysql 5.7.19 無料インストール版 (64 ビット) の設定方法に関する詳細なチュートリアル

公式サイトから mysql-5.7.19-winx64 をダウンロードします。これはシステムの 64...