Recently, because the company started using elementUI, it is necessary to edit the cells of the table during the development process. The following is my own way to make the table editable. If you are interested, you can learn about it. Achieve resultsAfter editing, the value of the corresponding table data field will also change. The console outputs all data to view the changes Implementation Code1. Custom editing components <template> <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> <label v-show="editStatus"> <input type="text" class="inputClass" ref="input" v-on:keyup.13="loseFocus" :value="value" @blur="loseFocus" /> </label> </div> <label class="cannotEdit" v-else> <span>{{ value }}{{ suffix }}</span> </label> </div> </template> <script> export default { name: "EditCell", props: { /** * Binding value */ value: { required: true }, /** * Editable? */ CanEdit: type: Boolean, default: true }, /** * Format function */ formatData: { type: Function, default: value => { return value; } }, /** * Editing event */ afterEdit: { type: Function, default: () => {} }, /** * Whether to format initially */ initFormat: { type: Boolean, default: false }, suffix: { default: "" } }, data() { return { editStatus: false, showData: "", defaultData: "", timeout: null }; }, methods: { /** * Click to start editing */ beginEdit() { this.editStatus = true; setTimeout(() => { this.$refs.input.focus(); }, 1); }, /** * @param {event} event * Close the editing state when focus is lost and save the data*/ loseFocus(event) { let value = this.formatData(event.target.value); this.editData(value); this.closeEditStatus(value); this.afterEdit(value); }, /** * Publish input event to modify data * @param value */ editData(value) { this.$emit("input", value); }, /** * Close editing state * @param value */ closeEditStatus(value) { this.editStatus = false; }, /** * Initial formatting data */ initData() { let newValue = this.formatData(this.value); this.$emit("input", newValue); } }, mounted() { if (this.initFormat) { this.initData(); } }, watch: 'value': function(newVal){ this.$emit("input", this.formatData(newVal)); } } }; </script> <style scoped> .editCell { height: 100%; width: 100%; } .inputClass { height: 30px; width: 100%; background-color: #fff; border-radius: 4px; border: 1px solid #dcdfe6; color: #606266; display: inline-block; font-size: inherit; line-height: 30px; outline: 0; padding: 0 15px; transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); overflow: visible; touch-action: manipulation; margin: 0; } </style> Page call import EditCell from "@/components/EditCell/EditCell"; components: { EditCell}, <el-table-column v-for="item in tableColumn" :prop="item.dataIndex" :label="item.title" :width="item.width" :align="item.align" :key="item.id" :fixed="item.fixed" > //Call the custom component here (dataIndex is the field in the header data, which is equivalent to displaying the teacher name corresponding to the header teacher) <template slot-scope="scope"> <span v-if="item.dataIndex !== 'batchInvest' && item.dataIndex !== 'remark'">{{scope.row[item.dataIndex]}}</span> // If you need to format the data, you can set: format-data="formatFun" formatFun This method can be defined in the methods of the current page <edit-cell v-else v-model="scope.row[item.dataIndex]" :can-edit="true"/> </template> <el-table-column v-for="item2 in item.children" :prop="item2.dataIndex" :label="item2.title" :width="item2.width" :align="item2.align" :key="item2.id" :fixed="item2.fixed" > </el-table-column> </el-table-column> This is the end of this article about element-ui directly clicking on a cell to edit in a table. For more content related to element cell editing, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Example of adding attributes using style in html
>>: CSS 3.0 text hover jump special effects code
Last time we talked about some SQL query optimiza...
Table of contents Write docker-compose.yml Run do...
Table of contents Web Development 1. Overview of ...
It is not easy to adjust the vertical center align...
Table of contents Declare fonts with font-face co...
1. When inserting, updating, or removing DOM elem...
Table of contents 1. Steps 1. Define buttom permi...
There are two common ways to make div background ...
01 The concept of parallel replication In the mas...
Record the problems you solve for others. Problem...
aforementioned This article is very short~ The ma...
I recently encountered a problem at work. The doc...
Table of contents 1. classList attribute 2. Pract...
Preface Semicolons in JavaScript are optional, an...
Use native js to implement a simple calculator (w...