<template> <el-table ref="editabletable" v-loading="loading" element-loading-text="加载中" :data="dataSource" current-row-key="id" :header-cell-style="{background:'#F5F5F5',color:'#606266'}" :border="true" @cell-dblclick="handleCellClick" > <el-table-column prop="cell0" label="单元格0" align="center" > <template slot-scope="scope"> <el-input-number v-if="scope.row.editable === 'cell0'" v-model="scope.row.cell0" v-focus style="width:80%" :controls="false" @blur="handleInputReset(scope.row)" /> <span v-if="scope.row.editable !== 'cell0'"> {{ scope.row.cell0 }} </span> </template> </el-table-column> <el-table-column prop="cell1" label="摊销比例" align="center" > <template slot-scope="scope"> <el-input-number v-if="scope.row.editable === 'cell1'" v-model="scope.row.cell1" v-focus style="width:80%" :controls="false" @blur="handleInputReset(scope.row)" /> <span v-if="scope.row.editable !== 'cell1'"> {{ scope.row.cell1 }} </span> </template> </el-table-column> </el-table> </template> <script lang="ts"> import Vue from 'vue' export default Vue.extend({ data() { return { dataSource: [{ cell1: '单元格1', cell0: '单元格0', editable: '', isEdit: false, }] } }, directives: { // 注册一个局部的自定义指令 v-focus focus: { // 指令的定义 inserted: function (el: HTMLElement) { // 聚焦元素 if (el) { el.querySelector('input').focus(); } } } }, methods: { handleCellClick (row: { [key: string]: any }, column: { [key: string]: any }): void { row.editable = column.property; row.isEdit = true; }, handleInputReset (row: { [key: string]: any }): void { row.editable = ''; } } }) </script>