iview表格点击单元格后变成编辑状态

使用场景:使用iview的Table,在表格中使用插槽,点击某一个单元格后,被点击的单元格变成可编辑的输入框,失去焦点后又切换回原来的状态。

找一个vue页面直接复制粘贴代码:

<template>
  <div style="padding:30px;">
    <Table border :columns="columns" :data="data" @on-cell-click="cellHandle">
      <template #name="{ row,column,index }">
        <Input ref="tableInput" v-model="row.name" v-if="isEdit === column.slot + '-' + row._index" @on-blur="isEdit = '' " />
        <span v-else>{{ row.name }}</span>
      </template>
      <template #age="{ row,column,index }">
        <Input ref="tableInput" v-model="row.age" v-if="isEdit === column.slot + '-' + row._index" @on-blur="isEdit = '' " />
        <span v-else>{{ row.age }}</span>
      </template>
      <template #address="{ row,column,index }">
        <Input ref="tableInput" v-model="row.address" v-if="isEdit === column.slot + '-' + row._index" @on-blur="isEdit = '' " />
        <span v-else>{{ row.address }}</span>
      </template>
      <template #city="{ row,column,index }">
        <Input ref="tableInput" v-model="row.city" v-if="isEdit === column.slot + '-' + row._index" @on-blur="isEdit = '' " />
        <span v-else>{{ row.city }}</span>
      </template>
      <template #job="{ row,column,index }">
        <Input ref="tableInput" v-model="row.job" v-if="isEdit === column.slot + '-' + row._index" @on-blur="isEdit = '' " />
        <span v-else>{{ row.job }}</span>
      </template>
      <template #hobby="{ row,column,index }">
        <Input ref="tableInput" v-model="row.hobby" v-if="isEdit === column.slot + '-' + row._index" @on-blur="isEdit = '' " />
        <span v-else>{{ row.hobby }}</span>
      </template>
      <template #wife="{ row,column,index }">
        <span>{{ row.wife }}</span>
      </template>
    </Table>
  </div>

</template>
<script>
export default {
  data () {
    return {
      columns: [
        {title: 'name',key: 'name', slot: 'name'},
        {title: 'age', key: 'age',slot:"age"},
        {title: 'address', key: 'address',slot:"address"},
        {title: 'city', key: "city",slot: "city"},
        {title: 'job', key: 'job',slot: "job"},
        {title: 'hobby', key: 'hobby',slot: "hobby"},
        {title: 'wife', key: 'wife',slot: "wife"},
      ],
      data: [
        {
          name: 'John Brown',
          age: 18,
          address: 'New York No. 1 Lake Park',
          city:"上海",
          job:"工程师",
          hobby:"听音乐",
          wife:"小李",
        },
        {
          name: 'Jim Green',
          age: 24,
          address: 'London No. 1 Lake Park',
          city:"南京",
          job:"机械",
          hobby:"看电影",
          wife:"小周",
        },
        {
          name: 'Joe Black',
          age: 30,
          address: 'Sydney No. 1 Lake Park',
          city:"杭州",
          job:"护士",
          hobby:"看书",
          wife:"小项",
        },
        {
          name: 'Jon Snow',
          age: 26,
          address: 'Ottawa No. 2 Lake Park',
          city:"合肥",
          job:"医生",
          hobby:"游玩",
          wife:"小方",
        }
      ],
      isEdit:"",
    }
  },
  methods: {
    cellHandle(row, column) {
      // let arr = [0,1,2,3];     // 可以使用列名的.length
      // if(arr.indexOf(row._index) >= 0) return      // 当点击的是0,1,2,3行的时候,不给this.isEdit赋值,即无法完成切换效果
      // if(arr.indexOf(column._index) >= 0) return      // 当点击的是0,1,2,3列的时候,不给this.isEdit赋值,即无法完成切换效果
      this.isEdit = column.slot + "-" + row._index;
      this.$nextTick(()=>{
        this.$refs.tableInput && this.$refs.tableInput.focus();
      })
    },
  }
}
</script>

这里通过判断点击的那个单元格的名字和index位置来判断是点击了哪个单元格来实现

参考:iview中实现点击表格单元格完成编辑和查看(span和input切换) - 简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤实现这个功能: 1. 创建一个全局的点击事件监听器,监听所有的点击事件。 ``` mounted() { document.addEventListener('click', this.handleGlobalClick); }, beforeDestroy() { document.removeEventListener('click', this.handleGlobalClick); }, methods: { handleGlobalClick(event) { // 处理点击事件,例如判断是否点击编辑按钮 } } ``` 2. 在表格中添加编辑按钮,并为每个按钮绑定一个点击事件,阻止事件冒泡。 ``` <template> <table> <tbody> <tr v-for="(item, index) in tableData" :key="index"> <td>{{ item.name }}</td> <td>{{ item.age }}</td> <td> <button @click="handleEditClick(item, $event)">编辑</button> </td> </tr> </tbody> </table> </template> <script> export default { methods: { handleEditClick(item, event) { event.stopPropagation(); // 处理编辑事件,例如显示编辑框 } } } </script> ``` 3. 在全局的点击事件监听器中判断是否点击编辑按钮,如果没有则隐藏编辑框。 ``` handleGlobalClick(event) { const editBtn = event.target.closest('.edit-btn'); if (!editBtn) { // 隐藏编辑框 } } ``` 4. 在编辑框中添加保存和取消按钮,分别绑定对应的点击事件。 ``` <template> <div v-show="isEditing"> <input v-model="editName"> <input v-model="editAge"> <button @click="handleSaveClick">保存</button> <button @click="handleCancelClick">取消</button> </div> </template> <script> export default { methods: { handleSaveClick() { // 保存编辑内容 }, handleCancelClick() { // 取消编辑操作 } } } </script> ``` 通过以上步骤,您可以实现点击编辑按钮后显示编辑框,点击其他区域则隐藏编辑框的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值