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

推薦する

mysql57サービスが突然消えた問題をすぐに解決する

1つ、 G:\MySQL\MySQL Server 5.7\bin> mysqld --ini...

MySQLデータファイルの保存場所を表示する方法

次のような疑問が湧くかもしれません。MySQLをローカル (自分のコンピュータ) にインストールした...

MySQL SQL ステートメント分析とクエリ最適化の詳細な説明

パフォーマンスの問題のあるSQL文を取得する方法1. ユーザーからのフィードバックを通じてパフォーマ...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...

mysql インストーラ コミュニティ 8.0.12.0 インストール グラフィック チュートリアル

このチュートリアルでは、参考のためにmysqlインストーラコミュニティ8.0.12.0のインストール...

Alibaba Cloud ドメイン名と IP バインディングの手順と方法

1 Alibaba Cloud コンソールに入り、ドメイン名コンソールを見つけて、バインドするドメイ...

ReactでのsetStateの使用と同期と非同期の使用

React では、this.state を使用して状態を直接変更しても、コンポーネントは再レンダリン...

MySQL のインデックスとビューの使用方法と違いの詳細な説明

序文この記事では主に、MySQL のインデックスとビューの使用方法と違いを紹介し、参考と学習のために...

MySQLデータのグループ化の詳細な説明

グループを作成グループ化は、SELECT ステートメントの GROUP BY 句で設定されます。例:...

MySQLの文字列インターセプト関連関数の概要

この記事では、MySQL の文字列インターセプト関連の機能を紹介します。具体的な内容は以下のとおりで...

Linux でジャンクファイルをエレガントに削除する方法

あなたも私と同じように、コンピューターのファイルを整然と整理し、不要なファイルを適宜削除するプログラ...

Apple の携帯電話のロックを解除するときに光沢のあるフォント効果を実現するために CSS3 を使用する例

0. はじめに2016 年 8 月 18 日 今日、iPhone をスライドさせてロックを解除すると...

Dockerパッケージイメージの実装と構成の変更

最近、Docker の学習や実際の運用で多くの問題に遭遇したので、それを記録するためにブログを書きま...

MYSQLのバックアップデータのスケジュールクリアの特定の操作

1|0 背景プロジェクトの要件により、各月の履歴在庫データをアーカイブしてバックアップする必要があり...

知らないかもしれない奇妙で興味深いDockerコマンド

はじめに使えるかもしれないが、あまり使われていない、シンプルで実用的なDockerコマンドをいくつか...