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

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

この記事では主に以下について説明します: カスタムツリーコントロール<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 データベースにインポートする方法

推薦する

TypeScript を使用して Vue3 で axios をカプセル化する詳細な例

この axios パッケージは、vue3 デモで使用されます。便宜上、element-plus は ...

Echarts バー水平棒グラフのサンプルコード

目次横棒グラフデータとスタイルを動的に更新するeChartsの幅と高さの適応の問題を解決する縦棒グラ...

一意の注文番号を生成するためのMySQLの高同時実行方法

序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...

CSS3 を使用して 3D テキスト ホバー効果を実装するサンプル コード

この記事では、3D テキストのホバー変更効果を実現するための CSS3 のサンプル コードを紹介しま...

Vueは商品詳細ページの商品タブ機能を実装します

この記事の例では、商品詳細ページ機能を実現するためのVueの商品タブの具体的なコードを参考までに共有...

TS 数値区切り文字とより厳密なクラス属性チェックの詳細な説明

目次概要演算子の改良と正確なinstanceofよりスマートなオブジェクトリテラル推論固有のシンボル...

Docker-compose ワンクリックデプロイ gitlab 中国語版の方法手順

1. GitLabの紹介Gitlab 公式アドレス: https://about.gitlab.co...

テーブルリストを破棄するには、標準のdl、dt、ddタグを使用します。

現在、ますます多くのフロントエンド開発者が、元のテーブル レイアウトを xHTML + CSS に置...

MySQL <> および <=> 演算子の紹介

<> 演算子機能: 等しくないことを示します。注: 「!=」演算子と同じ機能を持ちますが...

JavaScript ベースで年・月・日の 3 階層連携を実現

この記事では、年、月、日の3段階のリンクを実現するためのJavaScriptの具体的なコードを参考ま...

SVN のインストールと基本操作 (グラフィック チュートリアル)

目次1. SVNとは何か2. SVNサーバーとクライアントの取得方法3. SVN ワークフローとアー...

JavaScript はモーダルボックスのドラッグ効果を実現します

これはモーダル ボックスのドラッグのケースです。ここで実装する関数は次のとおりです。 1. ポップア...

MySQL ページング制限の実用的な最適化

序文クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があり...

MySQL/MariaDB で完全な Unicode をサポートする方法

目次utf8mb4 の紹介UTF8 バイト数超過エラーutf8mb4 サポートデフォルトの文字エンコ...