プロジェクトには、オンラインで編集する必要があるテーブルがあります。最初は、要素の 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 カスタム テンプレートはスロットを使用して実装されます。スロットは、 <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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux ファイル管理コマンド例の分析 [権限、作成、削除、コピー、移動、検索など]
1つ、 G:\MySQL\MySQL Server 5.7\bin> mysqld --ini...
次のような疑問が湧くかもしれません。MySQLをローカル (自分のコンピュータ) にインストールした...
パフォーマンスの問題のあるSQL文を取得する方法1. ユーザーからのフィードバックを通じてパフォーマ...
検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...
このチュートリアルでは、参考のためにmysqlインストーラコミュニティ8.0.12.0のインストール...
1 Alibaba Cloud コンソールに入り、ドメイン名コンソールを見つけて、バインドするドメイ...
React では、this.state を使用して状態を直接変更しても、コンポーネントは再レンダリン...
序文この記事では主に、MySQL のインデックスとビューの使用方法と違いを紹介し、参考と学習のために...
グループを作成グループ化は、SELECT ステートメントの GROUP BY 句で設定されます。例:...
この記事では、MySQL の文字列インターセプト関連の機能を紹介します。具体的な内容は以下のとおりで...
あなたも私と同じように、コンピューターのファイルを整然と整理し、不要なファイルを適宜削除するプログラ...
0. はじめに2016 年 8 月 18 日 今日、iPhone をスライドさせてロックを解除すると...
最近、Docker の学習や実際の運用で多くの問題に遭遇したので、それを記録するためにブログを書きま...
1|0 背景プロジェクトの要件により、各月の履歴在庫データをアーカイブしてバックアップする必要があり...
はじめに使えるかもしれないが、あまり使われていない、シンプルで実用的なDockerコマンドをいくつか...