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 スケジュールタスクの実装と使用例

推薦する

よく使われるHTMLタグのインライン要素とブロックレベル要素の詳細な説明

ブロック要素HTMLタグ分類の詳細* 住所 - 住所* blockquote - ブロック引用* c...

MySQL 文字列インデックスのより合理的な作成ルールに関する議論

序文MySQL インデックスの使用に関しては、これまでインデックスの最左接頭辞ルール、インデックス ...

MySQLサービスを開くおよび閉じる2つの方法

方法1: cmdコマンドを使用するまず、DOS ウィンドウを開き、スタート、実行、cmd と入力しま...

Ubuntuはポート22を開きます

シナリオssh 経由で Ubuntu サーバーに接続するには、xshell ツールを使用する必要があ...

DockerプライベートライブラリHarborのアーキテクチャとコンポーネントの説明

この記事では、Harbor アーキテクチャの構成と、実行時に各コンポーネントを使用する方法について説...

VMware Workstation 14 Pro に Win10 システムをインストールする

この記事では、VMware Workstation 14 Proにシステムをインストールする方法を紹...

MySQL テーブルと列のコメントの概要

コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...

Google の新しい UI から学べること (画像とテキスト)

2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...

古い Vue プロジェクトに Vite サポートを追加する方法

1. はじめに会社のプロジェクトを引き継いで2年になります。今では毎回プロジェクトを起動するのに1分...

MySQLの明示的な型変換の簡単な分析

CAST関数前回の記事では、型変換を表示するために使用する CAST 関数について説明しました。暗黙...

CentOS7にMariaDB 10.2.4をインストールする方法の詳細な説明

CentOS 6 以前のバージョンでは、MySQL サーバー/クライアント インストール パッケージ...

2 つの Linux サーバー間の自動ファイル同期

サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....

NginxはURLのパスに応じてアップストリームに動的に転送します

Nginx では、URL のパス パラメータに基づいて、到達不可能なアップストリームに動的に転送する...

CSS3 で背景の透明化と不透明テキストを実装するサンプルコード

最近、画像上に半透明の背景でテキストを表示する必要があるという要件に遭遇しました。その効果は次のよう...