爆改vue3 setup naiveui可编辑table

使用naiveui官网的可编辑table总是报错,所以手写了一个

思路:table数据数组unitMsgArr对应一个布尔的数组isEditArr ,点击table可编辑的行数据的时候,更改对应的isEdit为true,此时渲染组件EditCom,在EditCom组件中编辑完成,触发父组件的方法更改数据,完成编辑

table页面代码,重点在columns的配置

<n-data-table :columns="columns"
                  :data="unitMsgArr"
                  :bordered="true"
                  style="height:520px" />

<script>

//获取点击的行在数据数组unitMsgArr对应的index
const getDataIndex = (id: string) => {
      return unitMsgArr.value.findIndex((item) => item.id === id)
}
 //拿到前页面的unitMsgArr时,生成对应的是否边际数组 isEditArr   
const isEditArr = ()=>{
	unitMsgArr.value.forEach(()=>{
	   //默认都不可以编辑
    	return false
    })
}

	setup(){
	const createColumns = () => {
      return [
        {
          title: '姓名',
          key: 'name',
          width: 400
        },
        {
          title: '年龄',
          key: 'age',
          width: 400
        },
        {//可编辑列
          title: '编号',
          key: 'num',
          width: 300,
          render(row: unitType) {
            if (isEditArr.value[getDataIndex(row.id)] === false) {
              return h(
                NButton,
                {
                  text: true,
                  onClick: () => {
                    isEditArr.value[getDataIndex(row.id)] =
                      !isEditArr.value[getDataIndex(row.id)]
                  }
                },
                {
                  default: () => row.num
                }
              )
            } else {
              return h(EditCom, {
                rowData: row,
                onLoseFouce: (data: any) => {
                  changeNumFun(data)
                }
              })
            }
          }
        }
        }
      ]
    }
	}
</script>

自己创建一个组件EditCom,在table可编辑的列中使用

EditCom代码

<template>
  <div class="editBox">
    <n-space>
      <n-input class="inputBox"
               placeholder="输入编号"
               v-model:value="inputNum"></n-input>
      <n-button @click="submitNum">确定</n-button>
    </n-space>
  </div>
</template>
<script lang="ts">
import { ref, h,defineComponent } from 'vue'

// LoseFouce 父组件方法

export default defineComponent({
  name: 'editCom',
  props: {
    rowData: {
      type: Object,
      default: 0
    }
  },
  setup(props, context) {
    console.log(props.rowData.num)
    // 输入的数字
    const inputNum = ref(props.rowData.num)
    // 输入数字触发方法
    const changeNum = () => {
      console.log(inputNum.value)
    }
    // 点击确定触发方法
    const submitNum = () => {
      console.log('确定更改')
      context.emit('loseFouce', {
        indexNum: inputNum.value,
        id: props.rowData.id
      })

      // 将输入的数字传递到父组件
    }
    return {
      inputNum, //输入的数字
      changeNum, //改变数字
      submitNum //确定按钮
    }
  }
})
</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中,可以使用`<el-table>`组件来实现可编辑的表格。具体步骤如下: 1. 安装`element-plus`组件库:在终端中运行以下命令来安装: ``` npm install element-plus --save ``` 2. 在Vue3的入口文件中引入`element-plus`组件库: ```js import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 3. 在需要使用可编辑表格的组件中,引入`<el-table>`组件,并设置`editable`属性为`true`: ```html <template> <el-table :data="tableData" :editable="true"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, address: '北京市' }, { name: '李四', age: 20, address: '上海市' }, { name: '王五', age: 22, address: '广州市' } ] } } } </script> ``` 上面的代码中,`tableData`数组中的数据是表格的数据源,`el-table-column`组件中的`prop`属性对应了`tableData`数组中的数据键名,`label`属性则是表格列的标题。 当`editable`属性为`true`时,表格的单元格可以进行编辑,用户可以直接在单元格中输入或修改数据,修改后的数据会自动同步到`tableData`数组中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值