ElementUI实现可编辑表格

实现效果

  • 【可编辑单元格】双击某个单元格 该单元格变为input输入框 编辑修改目标单元格 ;并通过v-focus让input自动获取焦点
  • input输入框失去焦点时 input输入框隐藏 展示默认Table 
<el-table :data="paramTable" border tooltip-effect="light" size="mini" @cell-dblclick="cellClick">
    <el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
    <el-table-column prop="factorLevel" label="值" align="center" show-overflow-tooltip>
        <template slot-scope="scope">
            <el-input size="mini" v-model="scope.row.factorLevel" v-if="scope.row.flag" @blur="inputClick(scope.row)" v-focus></el-input>
            <span v-if="!scope.row.flag">{{scope.row.factorLevel}}</span>
        </template>
    </el-table-column>
    <el-table-column fixed="right" label="操作" align="center" width="90px">
        <template slot-scope="scope">
            <el-button size="mini" type="text" icon="el-icon-delete"></el-button>
        </template>
    </el-table-column>
</el-table>  
<script>
export default {
    data(){
        return{
            paramTable:[{
                factorLevel:1,
                flag:false
            },{
                factorLevel:2,
                flag:false
            },{
                factorLevel:3,
                flag:false
            }]
        }
    },
    directives: {
        // 注册一个局部的自定义指令 v-focus
        focus: {
            // 指令的定义
            inserted: function (el) {
                // 聚焦元素
                el.querySelector('input').focus()
            }
        }
    },
    methods: {
        //双击单元格后,显示input,并通过v-focus让input自动获取焦点
        cellClick(row){
            row.flag=true
            console.log(row)
        },
        //input框失去焦点事件
        inputClick(row){
            row.flag=false
        }
    }    
}
</script>

 双击单元格后,显示input,并通过v-focus让input自动获取焦点

 input框失去焦点事件

 Element-UI可编辑表格的实现

实现编辑表格可以使用 ElementUI 的 el-table 和 el-input 组件结合使用,具体的代码实现可以参考以下示例: ```html <template> <div> <el-table :data="tableData" style="width: 100%"> <el-table-column label="姓名" prop="name"> <template slot-scope="{ row }"> <el-input v-model="row.name" :disabled="!row.edit"></el-input> </template> </el-table-column> <el-table-column label="年龄" prop="age"> <template slot-scope="{ row }"> <el-input v-model="row.age" :disabled="!row.edit"></el-input> </template> </el-table-column> <el-table-column label="地址" prop="address"> <template slot-scope="{ row }"> <el-input v-model="row.address" :disabled="!row.edit"></el-input> </template> </el-table-column> <el-table-column> <template slot-scope="{ row }"> <el-button type="primary" v-if="!row.edit" @click="editRow(row)">编辑</el-button> <el-button type="success" v-if="row.edit" @click="saveRow(row)">保存</el-button> <el-button type="danger" v-if="row.edit" @click="cancelEdit(row)">取消</el-button> </template> </el-table-column> </el-table> <el-button type="primary" @click="addRow">新增</el-button> <el-button type="success" @click="saveTableData">保存</el-button> </div> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20, address: '北京市海淀区' }, { name: '李四', age: 25, address: '上海市浦东区' }, { name: '王五', age: 30, address: '广州市天河区' } ] } }, methods: { editRow(row) { row.edit = true }, saveRow(row) { row.edit = false }, cancelEdit(row) { row.edit = false }, addRow() { this.tableData.push({ name: '', age: '', address: '', edit: true }) }, saveTableData() { const data = JSON.stringify(this.tableData) // 发送数据给后端 console.log(data) } } } </script> ``` 在上面的代码中,我们使用 el-table-column 的 slot-scope 属性来自定义格单元格的内容,其中 el-input 组件用来实现编辑内容的输入,同时使用 v-model 指令来绑定数据。在最后两个 el-button 按钮中,一个用来新增格行,一个用来保存格数据,保存数据时,我们可以将格数据转换成 JSON 格式的字符串后发送给后端。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值