<el-table @cell-dblclick="editCell">
	<el-table-column :key="randomKey" prop="name">
	   <template slot-scope="{row,column}" >
	     <el-select
	       v-show="row[column.property + 'isShow']"
	       :ref="column.property"
	       @blur="alterData(row,column)">
	       <el-option></el-option>
	     </el-select>
	   	 <span v-show="!row[column.property + 'isShow']">文本</span>
	   </template>
	</el-table-column>
</el-table>
// 处理鼠标双击单元格
editCell(row, column){
  // 把该行该列(某单元格)标记属性是否显示
  row[column.property + 'isShow'] = true
  this.refreshTable()
  this.$nextTick(() => {
    this.$refs[column.property] && this.$refs[column.property].focus()
  })
},
// 重新渲染该列
refreshTable () {
  // 因为设置了isShow,但是该节点并不是响应式的,所以需要通过修改key重新渲染节点上去
  this.randomKey = Math.random()
},
// 失去焦点处理
alterData (row, column) {
  row[column.property + 'isShow'] = false
},
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐