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
1. CSS file naming conventions Suggestion: Use le...
Table of contents Find and fix table conflicts Up...
Environmental Statement Host OS: Cetnos7.9 Minimu...
Table of contents background: Nginx smooth upgrad...
Preface Since the most important data structure i...
Table of contents 1. After downloading, unzip it ...
This article is just to commemorate those CSS que...
This article mainly introduces the solution to th...
Preface: As far as I know, currently CSS can only...
It has been a long time since the birth of vue3, ...
Table of contents 1. Download 2. Deployment 3. Ng...
1. Confirm whether MySQL has been installed. You ...
This article example shares the specific code of ...
Two small problems, but they bothered me for a lon...
Scenario A recent requirement is an h5 page for m...