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
The most important logs in the MySQL log system a...
There are too much knowledge to learn recently, a...
Table of contents Preface What are asynchronous i...
Whitespace rules in HTML In HTML, multiple spaces...
Table of contents background Problem Description ...
This article example shares the specific code of ...
Detailed explanation of Linux vi command The vi e...
Table of contents 1. Operation of js integer 2. R...
Table of contents 1. Vue initialization vue entry...
Let’s take a look at the renderings first: XML/HT...
After a lot of trouble, I finally figured out the...
Table of contents Initialization of echart app-ba...
This article example shares the specific code of ...
Preface Starting from MySQL 5.7.11, MySQL support...
Table of contents Basic application of javascript...