Vue elementUI はツリー構造テーブルと遅延読み込みを実装します

Vue elementUI はツリー構造テーブルと遅延読み込みを実装します

1. 成果を達成する

2. バックエンドの実装

2.1 エンティティクラス

@データ
@ApiModel(説明 = "データ辞書")
@テーブル名("辞書")
パブリッククラスDict {

    プライベート静的最終long serialVersionUID = 1L;

    @ApiModelProperty(値 = "id")
    プライベートな Long ID;

    @ApiModelProperty(値 = "作成時間")
    @JsonFormat(パターン = "yyyy-MM-dd HH:mm:ss")
    @テーブルフィールド("create_time")
    プライベート日付createTime;

    @ApiModelProperty(値 = "更新時間")
    @TableField("更新時間")
    プライベート日付更新時間;

    @ApiModelProperty(値 = "論理削除 (1: 削除済み、0: 削除されていない)")
    @テーブルロジック
    @TableField("削除済み")
    プライベート整数 isDeleted;

    @ApiModelProperty(値 = "その他のパラメータ")
    @テーブルフィールド(存在する = false)
    プライベート Map<String,Object> パラメータ = new HashMap<>();

    @ApiModelProperty(値 = "上位 ID")
    @テーブルフィールド("親ID")
    プライベート Long 親 ID;

    @ApiModelProperty(値 = "名前")
    @テーブルフィールド("名前")
    プライベート文字列名;

    @ApiModelProperty(値 = "値")
    @TableField("値")
    プライベート文字列値。

    @ApiModelProperty(値 = "エンコーディング")
    @TableField("dict_code")
    プライベート文字列 dictCode;

    @ApiModelProperty(value = "子ノードを含めるかどうか")
    @テーブルフィールド(存在する = false)
    プライベートブール値hasChildren;

}

上記には、データベースに存在しない場合でも、hasChildren プロパティを含める必要があります。これは、要素フレームワークによって必須です。

2.2 データベース内のデータ構造

2.3 バックエンドインターフェース

バックエンドで完全に実装されている場合は、階層構造に従ってすべてのデータをクエリし、それをカプセル化する再帰クエリを記述するだけです。しかし、要素のテーブル コンポーネントはいくつかのものをカプセル化しています。ここでは、親 ID に従ってサブデータ リストをクエリするだけで済みます。

コントローラーコード:

 //親 ID に従ってサブデータ リストを照会します @ApiOperation(value = "親 ID に従ってサブデータ リストを照会します")
    @GetMapping("子データ/{id} を検索")
    パブリック結果findChildData(@PathVariable Long id){
        リスト<Dict> list = dictService.findChildData(id);
        Result.ok(リスト)を返します。
    }

サービス

サービス実装クラス

@サービス
パブリッククラス DictServiceImpl は ServiceImpl<DictMapper, Dict> を拡張し、DictService を実装します {

    //親IDに従ってサブデータリストを照会する @Override
    パブリックリスト<Dict> findChildData(Long id) {
        QueryWrapper<Dict> wrapper = 新しい QueryWrapper<>();
        wrapper.eq("parent_id",id);
        リスト<Dict> リスト = baseMapper.selectList(ラッパー);
        //リストコレクション内の各辞書オブジェクトにhasChildrenを設定します
        リスト.forEach(x->{
            長い dictId = x.getId();
            ブール値 isChild = this.isChildren(dictId);
            x.setHasChildren(子が存在するかどうか)
        });
        リストを返します。
    }

    // id の下に子データがあるかどうかを判断 private boolean isChildren(Long id){
        QueryWrapper<Dict> wrapper = 新しい QueryWrapper<>();
        wrapper.eq("parent_id",id);
        整数カウント = baseMapper.selectCount(ラッパー);
        カウント > 0 を返します。
    }
}

2.4 Swaggerはバックエンドの構造と機能が正常かどうかをテストします

3. フロントエンドの実装

3.1 ページにel-tableコンポーネントを導入する

リスト.vue

 <テンプレート>
  <div class="アプリコンテナ">

    <el-テーブル
      :data="リスト"
      スタイル="幅: 100%"
      行キー="id"
      国境
      怠け者
      :load="getChildrens"
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
      <el-table-column label="名前" width="230" align="left">
        <テンプレート スロット スコープ="スコープ">
          <span>{{ スコープ.行.名前 }}</span>
        </テンプレート>
      </el-table-column>

      <el-table-column label="エンコーディング" width="220">
        <テンプレート スロット スコープ="{行}">
          {{ row.dictCode }}
        </テンプレート>
      </el-table-column>
      <el-table-column ラベル="値" 幅="230" 配置="左">
        <テンプレート スロット スコープ="スコープ">
          <span>{{ スコープ.行.値 }}</span>
        </テンプレート>
      </el-table-column>
      <el-table-column label="作成時間" align="center">
        <テンプレート スロット スコープ="スコープ">
          <span>{{ スコープ.行.作成時間 }}</span>
        </テンプレート>
      </el-table-column>
    </el-table>
  </div>

</テンプレート>

<スクリプト>
'@/api/dict' から dict をインポートします
エクスポートデフォルト{
  名前: 'リスト',
  データ(){
    戻る {
      list:[], //データ辞書リスト配列 dialogImportVisible:false, //ポップアップボックスを表示するかどうかを設定します}
  },
  作成された() {
    this.getDictList(1)
  },
  方法:{
    //データ辞書リスト getDictList(id){
      dict.dictList(id)
        .then(応答=>{
            this.list=レスポンスデータ
        })
    },
    getChildrens(ツリー、ツリーノード、解決) {
      dict.dictList(tree.id).then(応答 => {
        解決(応答データ)
      })
    },
  }
}
</スクリプト>

<スタイルスコープ>

</スタイル>

上記の重要なメソッドは getChildrens メソッドです。このメソッドは、各レイヤーでバックエンド インターフェイスを呼び出して子ノード データを照会し、それをツリー構造のテーブル データに追加します。

バックエンド構造を呼び出すツールjsファイルdict.js

 '@/utils/request' からリクエストをインポートします

エクスポートデフォルト{
  //データ辞書リスト dictList(id){
    リクエストを返す({
      url: `/admin/cmn/dict/findChildData/${id}`,
      メソッド: 'get'
    })
  },
}

3.2 実施効果

フロントエンドとバックエンドのテストに問題はありません。遅延読み込みが使用されているため、子ノードのデータは親ノードがクリックされたときにのみ読み込まれ、データ量が多すぎることによるシステムのフリーズを回避できます。

Vue elementUI のツリー構造テーブルと遅延読み込みの実装に関するこの記事はこれで終わりです。Vue elementUI の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue elementUI フォームのネストされたテーブルと各行の検証の詳細な説明
  • VueコンポーネントライブラリElementUIはテーブルリストのページング効果を実現します
  • Vue+ElementUI テーブルはテーブルページングを実現します
  • Vue+elementUIはテーブルキーワードのフィルタリングと強調表示を実現します
  • Vue2.0+ElementUI はテーブルページめくりの例を実装します
  • VueベースのElementUIテーブルの詳細説明

<<:  新しい CSS :where および :is 疑似クラス関数とは何ですか?

>>:  HTML ページ適応幅テーブル

推薦する

Linux での Redis の永続性、マスター スレーブ同期、Sentinel の詳細な説明

1.0 Redis の永続性Redis はメモリ内データベースです。サーバー プロセスが終了すると、...

MySQL データベースの鉄則 (要約)

適切なデータベース仕様は、ソフトウェア実装の複雑さを軽減し、通信コストを削減するのに役立ちます。この...

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

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

MySQLのさまざまなロックに関する詳細な理解

目次ロックの概要ロックの分類データベース操作の粒度データ操作の種類MySQL ロックさまざまなストレ...

CSS クロスフェード() を使用して半透明の背景画像効果を実現するサンプルコード

1. 要件の説明特定の要素については、背景background-imageを半透明にしたいが、テキス...

Vueは製品の拡大鏡効果を実現します

この記事の例では、製品の拡大鏡効果を実現するためのVueの具体的なコードを共有しています。具体的な内...

RGBカラーテーブルコレクション

RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...

Vue ルーターにパラメータを渡すときにページを更新するとパラメータが失われる問題に対処する方法

目次概要方法1: params経由でパラメータを渡す方法2: クエリを通じてパラメータを渡す方法3:...

Zabbix上のすべてのホストのIPとホスト名を取得する

ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...

Vue の foreach 配列と js の traversal 配列の書き方の説明

Vue foreach配列を記述し、jsで配列をトラバースする方法シナリオVueでAxiosを使用し...

Vue カプセル化 TabBar コンポーネントの完全なステップ記録

目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...

Dockerボリュームマウントの実装方法

最も単純な hello world 出力イメージを作成することは最も簡単なスタートですが、実行中のコ...

JavaScriptの詳細な分析と方向の変更方法

目次これ方法オブジェクト内これを隠した厳密モードこれを変更してこれいつものように、まずはコードを見て...

Linuxにソフトウェアをインストールするいくつかの方法の詳細な説明

1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...

Vueはコードのハイライトを実現するためにモナコを使用しています

Vue 言語と要素コンポーネントを使用して、コード コンテンツの入力を必要とし、ハイライト表示が可能...