vxe-table を使用して vue で編集可能なテーブルを作成するプロセス

vxe-table を使用して vue で編集可能なテーブルを作成するプロセス

プロジェクトには、オンラインで編集する必要があるテーブルがあります。最初は、要素の el-table を使用して実装しました。セル内の基本的な状況は、セルのクリックを聞いて span タグと input タグを切り替えることです。より複雑なセルでは、ドロップダウン選択やポップオーバーダイアログボックス編集など、対応する編集操作を実装するために多くの条件判断を使用します。テーブル全体には数十の列と十数個のデータがありますが、すでに明らかな遅延があります。多くの操作(el-input をネイティブ入力に置き換える、判断を減らす、頻繁なデータ切り替えを減らすなど)を行った後、速度は向上しましたが、まだ目に見えて遅延があり、基本的に使用できません。その後、vxe-table に切り替えてテーブルを書き直しました。 (なぜもっと良い vxe-table を使わないのかと聞かないでください。コードを書くときに最適化を試みずにリファクタリングを考える人がいるでしょうか?)

以下に使用手順を記録します。

1. グローバルインストール

npm をインストール xe-utils@3 vxe-table@3

main.js にインポート

'xe-utils' をインポートします。
'vxe-table' から VXETable をインポートします。
'vxe-table/lib/style.css' をインポートします。
​
Vue.use(VXETable);

実はオンデマンドでロードしてプロジェクトのサイズを小さくすることもできるのですが、ちょっと面倒だと思ったのでやめておきました。詳しく知りたい方は、以下のリンクをクリックしてご覧ください~vue-table on demand loading

2. 基本的な使い方

<テンプレート>
    <vxe-table :align="allAlign" :data="テーブルデータ">
        <vxe-table-column type="seq" width="60"></vxe-table-column>
        <vxe-table-column フィールド="name" タイトル="名前"></vxe-table-column>
        <vxe-table-column field="desc" title="説明"></vxe-table-column>
        <vxe-table-column フィールド="link" タイトル="リンク"></vxe-table-column>
    </vxe-テーブル>
</テンプレート>
<スクリプト>
    エクスポートデフォルト{
        データ () {
            戻る {
                allAlign: null、
                テーブルデータ: [
                    {
                        名前: "html",
                        説明: 'ハイパーテキスト マークアップ言語'、
                        リンク: 'https://www.runoob.com/html/html-tutorial.html'
                    },
                    {
                        名前: "css",
                        説明: 'カスケーディング スタイル シート'、
                        リンク: 'https://www.runoob.com/css/css-intro.html'
                    },
                    {
                        名前: "js",
                        説明: 'JavaScript',
                        リンク: 'https://www.runoob.com/js/js-tutorial.html'
                    }
                ]
            }
        }
    }
</スクリプト>

上記は基本的なテーブルを実現するには十分ですが、まだテーブルの表示のみであり、編集を実現するには追加の構成が必要です。

3. 実装編集

<テンプレート>
    <!--テーブルに edit-config 構成を追加します-->
    <vxe-table border :data="tableData" :edit-config="{トリガー: 'クリック', モード: 'セル'}">
        <!--セル vxe-table-column を再構成し、edit-render を使用して編集プロパティを構成します--->
        <vxe-table-column title="説明" width="180" fixed="left" field="desc"
                          :edit-render="{name: 'input', 属性: {type: 'text'}}">
        </vxe-テーブル列>
    </vxe-テーブル>
</テンプレート> 

具体的な設定については、APIを参照してください。

3. ドロップダウン選択を実装する

<テンプレート>
    <vxe-table border :data="tableData" :edit-config="{トリガー: 'クリック', モード: 'セル'}">
        <!--edit-render と入力ボックス編集の唯一の違いは、edit-render の設定です。新しいオプション選択はデータに追加されます--->
        <vxe-table-column title="表示するかどうか" width="180" field="isShow"
                          :edit-render="{name: 'select', options: selection, optionProps: {value: 'status', label: 'label'}}">
        </vxe-テーブル列>
    </vxe-テーブル>
</テンプレート>
<スクリプト>
    エクスポートデフォルト{
        データ () {
            戻る {
                allAlign: null、
                テーブルデータ: [
                    {
                        名前: "html",
                        説明: 'ハイパーテキスト マークアップ言語'、
                        リンク: 'https://www.runoob.com/html/html-tutorial.html',
                        表示: 1
                    }
                    //複数のデータを省略する········
                ]、
                選択: [
                    {ステータス: 1、ラベル: 'はい'},
                    {ステータス: 0、ラベル: 'いいえ'}
                ]
            }
        }
    }
</スクリプト>

4. テンプレートをカスタマイズする

vxe-table カスタム テンプレートはスロットを使用して実装されます。スロットは、 <template #插槽名></template>を使用して実装できます。次に例を示します。

<vxe-table-column フィールド="名前" 幅="120" タイトル="名前"
                  :edit-render="{name: 'input', 属性: {type: 'text'}}">
    <!-- ヘッダーをカスタマイズするには #header を使用します -->
    <テンプレート #ヘッダー>
        <span>名前</span>
        <span style="font-size: 12px; color: #ccc">テクノロジー</span>
    </テンプレート>
    <!-- コンテンツをカスタマイズするには #default を使用します -->
    <テンプレート #default="{行}">
        <span>テクノロジー名</span>
        <span>{{行名}}</span>
    </テンプレート>
    <!-- 編集をカスタマイズするには #edit を使用します -->
    <テンプレート #edit="{行}">
        <p>テクノロジー名</p>
        <input type="text" v-model="行名" class="vxe-default-input">
    </テンプレート>
</vxe-テーブル列>

デモンストレーションの目的で、名前列は編集可能な列にされ、列ヘッダー、デフォルトの表示内容、編集表示内容は、それぞれ #header、#default、#edit を使用してカスタマイズされます (以下を参照)。

5. リアルタイム保存機能

vxe-table の edit-closed メソッドを使用して編集ボックスの閉じをリッスンし、更新インターフェイスを呼び出してこれを実現します。

<テンプレート>
    <vxe-table border :data="tableData" :edit-config="{トリガー: 'クリック'、モード: 'セル'}"
               @edit-closed="データ更新">
        <vxe-table-column title="表示するかどうか" width="180" field="isShow"
                          :edit-render="{name: 'select', options: selection, optionProps: {value: 'status', label: 'label'}}">
        </vxe-テーブル列>
    </vxe-テーブル>
</テンプレート>
<スクリプト>
    エクスポートデフォルト{
        データ () {
            // 省略...
        },
        メソッド: {
            updateData ({行、列}) {
                // バックグラウンド更新インターフェースは 1 つのデータを受け入れるので、行を渡すだけです console.log(row);
            }
        }
    }
</スクリプト>

実際、公式メソッドでは、現在のセルの内容が変更されたかどうかのチェックも実装されていますが、データ構造が少し複雑で、ソース コード内のメソッドはあまり適用できません。 ここに貼り付けてください。

editClosedEvent ({ 行, 列 }) {
    定数 $table = this.$refs.xTable
    定数フィールド = 列.プロパティ
    const cellValue = row[フィールド]
    // セルの値が変更されたかどうかを判定します if ($table.isUpdateByRow(row, field)) {
        タイムアウトを設定する(() => {
            this.$XModal.message({
                内容: `部分的な保存に成功しました! ${フィールド}=${セル値}`,
                ステータス: '成功'
            })
            // セルを保存された状態に部分的に更新します $table.reloadRow(row, null, field)
        }, 300)
    }
}

以上が編集可能なテーブルを実装するための基本的な書き方です。データが非常に深い場合に、データが変更されたかどうかを検出する方法を勉強しましょう。

まとめると、vxe-table の編集可能なテーブルには編集可能な機能が組み込まれており、設定後に使用できるため、el-table のさまざまな判断スイッチを回避でき、編集機能をよりエレガントに実装できます。また、仮想スクロールもサポートしているため、大量のデータをロードするときにパフォーマンスが向上します。デメリットとしては、UI ダイアグラムが決まるとテーブルスタイルを書き直す必要があり、時間がかかることです。

複雑なテーブルに遭遇した場合は、パフォーマンスの最適化を自分で考えないことをお勧めします。 vxe-table を使用して 1 ステップで完了します。 後で再構築するコストが増加するだけです。 これは苦労して学んだ教訓です。

これで、vue で vxe-table を使用して編集可能なテーブルを作成する方法についての説明は終わりです。vue の編集可能なテーブルに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vxe-table vue テーブル テーブル コンポーネント 関数
  • vuejs+element UI の編集テーブルの行をクリックしたときにコンテンツを取得してフォームに入力する例
  • 編集可能なテーブルを実装するための Vue+iview サンプルコード
  • Vue カプセル化された編集可能なテーブル プラグイン メソッド

<<:  Linux ファイル管理コマンド例の分析 [権限、作成、削除、コピー、移動、検索など]

>>:  MySQL スケジュールタスクの実装と使用例

推薦する

CSS で画像アダプティブ コンテナを実装するためのサンプル コード

多くの場合、画像をコンテナのサイズに合わせて調整する必要があります。 1. imgタグ方式幅と高さを...

CSS スタイルの競合を解決するいくつかの方法 (要約)

1. セレクターを調整するコンビネータを使用すると、セレクターの説明をより正確に記述できます (C...

MySQL シリーズ 8 MySQL サーバー変数

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

mysql init_connect に関するいくつかの重要なポイントの要約

init_connectの役割init_connect は通常、接続が来たときに、自動コミットを 0...

MySQL でのストアド プロシージャと関数の作成の詳細な説明

目次1. ストアドプロシージャ1.1. 基本構文1.2 実行権限を指定してストアドプロシージャを作成...

psdカット画像をdiv+css形式に変換する

PSD から div css へのウェブページ切り取り例ステップ 1: まず、すべてのタグの内側と外...

CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...

MySQL 5.7.17 圧縮バージョンのインストールノート

この記事では、参考までにMySQL 5.7.17圧縮版のインストール手順を紹介します。具体的な内容は...

C++ を使用して MySQL に接続する方法

C++でMySQLに接続する際の参考情報です。具体的な内容は以下のとおりです。 MySQLCon ク...

Linux RabbitMQ クラスタ構築プロセス図

1. 全体的な手順冒頭で、RabbitMQ サービスをインストールして実行する方法を紹介しましたが、...

MySQL インデックスの使用方法 (単一列インデックスと複数列インデックス)

1. 単一列インデックスどの列にインデックスを作成するかを選択することは、パフォーマンス最適化プロ...

テーブルを動的に読み込み、削除する JavaScript

この記事では、テーブルを動的に読み込み、削除するためのJavaScriptの具体的なコードを参考まで...

CentOS 8 システム FTP サーバーのインストールとパッシブ モードの設定の詳細なチュートリアル

目次1. 基本を理解する2. システム環境を確認する3. ftpコマンドをインストールする[オプショ...