Element-uiはテーブル内のセルを直接クリックして編集します

Element-uiはテーブル内のセルを直接クリックして編集します

最近、会社でelementUIを使い始めたため、開発の過程でテーブルのセルを編集する必要が生じました。以下はテーブルを編集可能にする私独自の方法です。ご興味があれば、ぜひ学んでみてください。

成果を達成する

ここに画像の説明を挿入

編集後、対応するテーブルデータフィールドの値も変更されます。コンソールは変更を表示するためにすべてのデータを出力します。

実装コード

1. カスタム編集コンポーネント

<テンプレート>
  <div class="editCell">
    <div class="canEdit" v-if="CanEdit" @click="beginEdit">
      <label v-show="!editStatus">
        <span v-if="this.value!== null && this.value !== undefined && this.value !== ''">{{ value }}{{this.suffix}}</span>
        <span v-else style="padding-left: 100%;padding-top: 100%;"/>
      </ラベル>
      <label v-show="編集ステータス">
        <入力
          タイプ="テキスト"
          クラス="inputClass"
          ref="入力"
          v-on:keyup.13="フォーカスを失う"
          :value="値"
          @blur="フォーカスを失う"
        />
      </ラベル>
    </div>

    <label class="cannotEdit" v-else>
      <span>{{ 値 }}{{ 接尾辞 }}</span>
    </ラベル>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: "EditCell"、
  小道具: {
    /**
     * バインディング値 */
    価値: {
      必須: true
    },
    /**
     * 編集可能? */
    編集可能:
      タイプ: ブール値、
      デフォルト: true
    },
    /**
     * フォーマット関数 */
    フォーマットデータ: {
      タイプ: 関数、
      デフォルト: 値 => {
        戻り値;
      }
    },
    /**
     * イベント編集 */
    編集後: {
      タイプ: 関数、
      デフォルト: () => {}
    },
    /**
     * 最初にフォーマットするかどうか */
    初期化フォーマット: {
      タイプ: ブール値、
      デフォルト: false
    },
    接尾辞: {
      デフォルト: ""
    }
  },
  データ() {
    戻る {
      編集ステータス: false、
      表示データ: "",
      デフォルトデータ: "",
      タイムアウト: null
    };
  },
  メソッド: {
    /**
     * クリックして編集を開始 */
    編集を始める() {
      this.editStatus = true;
      タイムアウトを設定する(() => {
        this.$refs.input.focus();
      }, 1);
    },

    /**
     * @param {event} イベント
     * フォーカスが失われたときに編集状態を閉じてデータを保存します*/
    loseFocus(イベント) {
      値を this.formatData(event.target.value) とします。
      this.editData(値);
      this.closeEditStatus(値);
      this.afterEdit(値);
    },

    /**
     * データを変更する入力イベントを発行する * @param value
     */
    編集データ(値) {
      this.$emit("入力", 値);
    },

    /**
     * 編集状態を閉じる * @param 値
     */
    closeEditStatus(値) {
      this.editStatus = false;
    },
    /**
     * 初期フォーマットデータ */
    初期化データ() {
      newValue を this.formatData(this.value) とします。
      this.$emit("input", newValue);
    }
  },
  マウント() {
    if (this.initFormat) {
      このメソッドは、次のコードで実行されます。
    }
  },
  時計:
    '値': 関数(newVal){
      this.$emit("input", this.formatData(newVal));
    }
  }
};
</スクリプト>

<スタイルスコープ>
.editCell {
  高さ: 100%;
  幅: 100%;
}
.inputClass{
  高さ: 30px;
  幅: 100%;
  背景色: #fff;
  境界線の半径: 4px;
  境界線: 1px 実線 #dcdfe6;
  色: #606266;
  表示: インラインブロック;
  フォントサイズ: 継承;
  行の高さ: 30px;
  アウトライン: 0;
  パディング: 0 15px;
  遷移: 境界線の色 0.2s 立方ベジェ(0.645, 0.045, 0.355, 1);
  オーバーフロー: 表示可能;
  タッチアクション:操作;
  マージン: 0;
}
</スタイル>

ページコール

EditCellを「@/components/EditCell/EditCell」からインポートします。
コンポーネント: { EditCell},

 <el-テーブル列
    v-for="テーブル列内の項目"
      :prop="item.dataIndex"
      :label="アイテムタイトル"
      :width="アイテムの幅"
      :align="アイテム.align"
      :key="アイテムID"
      :fixed="アイテム.fixed"
  >
  	  //ここでカスタム コンポーネントを呼び出します (dataIndex はヘッダー データ内のフィールドであり、ヘッダーの教師に対応する教師名を表示するのと同じです)
      <テンプレート スロット スコープ="スコープ">
          <span v-if="item.dataIndex !== 'batchInvest' && item.dataIndex !== 'remark'">{{scope.row[item.dataIndex]}}</span>
          // データをフォーマットする必要がある場合は、次のように設定できます: format-data="formatFun" formatFun このメソッドは、現在のページのメソッドで定義できます <edit-cell v-else v-model="scope.row[item.dataIndex]" :can-edit="true"/>
      </テンプレート>
      <el-テーブル列
          v-for="item.children 内の item2"
          :prop="item2.データインデックス"
          :label="item2.title"
          :width="item2.width"
          :align="item2.align"
          :key="item2.id"
          :fixed="item2.fixed"
      >
      </el-table-column>
  </el-table-column>

これで、element-ui でセルを直接クリックしてテーブルを編集する方法についての説明は終了です。要素セル編集に関するその他のコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue 要素 UI テーブル埋め込みプログレスバー機能の実装方法
  • Vue の element-ui フォームまたはテーブル ラベルでの改行の問題について
  • element-uiコンポーネントel-autocompleteの使用の詳細な説明
  • VUE+element-ui ファイルアップロードサンプルコード
  • element-ui に基づく動的スキニングのコードの詳細な説明

<<:  HTML でスタイルを使用して属性を追加する例

>>:  CSS 3.0 テキストホバージャンプ特殊効果コード

推薦する

CSS の一部のプロパティの前には「*」または「_」が付きます。

CSS の一部のプロパティの前には「*」または「_」が付きます。さまざまなブラウザを識別する例えば...

k8s に ingress-nginx をデプロイする手順

目次序文1. Ingressの展開と構成2. httpsを使用する序文k8sクラスタサービスがデプロ...

Nginx+SpringBoot による負荷分散の実装例

負荷分散の概要Nginx の負荷分散実装を紹介する前に、負荷分散の分類について簡単に説明します。負荷...

CSSがページのレンダリングをブロックするかどうかについての簡単な説明

おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...

Mysql を 5.7 にアップグレードした後のグループ クエリの問題を解決する

問題を見つける最近MySQLをMySQL 5.7にアップグレードした後、次のようなクエリでグループ化...

いくつかの CSS3 タグの短縮形 (推奨)

border-radius: CSS3 丸い角構文: border-radius: 25px;楕円...

JavaScript オブジェクトを作成する 3 つの方法

目次1. オブジェクトリテラル2. newキーワードはオブジェクトを作成する3. Object.cr...

XML構文の詳細な説明

1. 文書化ルール1. 大文字と小文字が区別されます。 2. 属性値は引用符(一重引用符または二重引...

Alibaba Cloud Ubuntu 16.04 が IPSec サービスを構築

IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...

MySQL 5.5 で範囲パーティションを追加および削除する例

導入RANGE パーティション分割は、指定された連続した間隔範囲に基づいています。RANGE の初期...

MySql ストレージ エンジンとインデックスに関する知識のまとめ

ストレージエンジンデータベース ストレージ エンジンとは何ですか?データベース エンジンは、データベ...

MybatisはSQLクエリのインターセプションと変更の詳細を実装します

序文インターセプターの機能の 1 つは、特定のメソッドの呼び出しをインターセプトできることです。イン...

Linux ログ内のキーワードとその前後の情報を検索する方法の例

日常業務では、ログを表示する必要がよくあります。たとえば、 tail コマンドを使用してログをリアル...

MySQLにおけるビューの作成(CREATE VIEW)と使用制限の詳しい説明

この記事では、例を使用して、MySQL ビューの作成 (CREATE VIEW) と使用上の制限につ...