当前位置:   article > 正文

antd vue3 form 表单的赋值和取值问题_antd组件form表单直接赋值

antd组件form表单直接赋值

 当点击编辑的时候给form表单赋值,如下图

 

  1. <a-form
  2. :model="formState" 双向绑定的数组
  3. :label-col="{ span: 4 }"
  4. :wrapper-col="{ span: 20 }"
  5. >
  6. //给它一个初始值
  7. interface FormState{
  8. key:number| undefined,
  9. name: string,
  10. gender:number
  11. department: string,
  12. dateBirth:string | object,
  13. salary:number| undefined
  14. }
  15. const initialFormState ={
  16. key: undefined,
  17. name: "",
  18. gender: 0,
  19. department: "",
  20. dateBirth: "",
  21. salary: undefined,
  22. };
  23. let formState = ref<FormState>(
  24. initialFormState);
  25. //表单数据可以通过 record拿到
  26. <a-button type="primary" size="small"
  27. @click="edit(record)" //record数据怎么
  28. 拿到的可以看下面的表格代码
  29. >编辑</a-button>
  30. import { useStore } from "vuex"
  31. const store = useStore()
  32. const emit=defineEmits(["open"])
  33. const edit=(record:TableDataType)=>{
  34. console.log(record,"haha")
  35. store.commit("changeDate",record)
  36. emit("open")
  37. }
  38. //然后再存到vuex里面,存值的时候注意一下playload和record应该用的是同一个引用地址,
  39. 我这里为了日历组件能够正确显示,原本是直接用playload里面的dateBirth转moment对象,
  40. 结果导致表格出错了,后来想了想,改用JSON深复制,重新创建了一个新对象
  41. mutations: {
  42. changeDate(state,playload){
  43. const load=JSON.parse(JSON.stringify(playload))
  44. load.dateBirth=moment(new Date(load.dateBirth))
  45. state.tableData=load
  46. }
  47. //表格数据存进入之后,就可以取值了,取值我采用wateffect,
  48. 在表单弹出的时候将表格数据赋值,这个wateffect也是坑啊,
  49. 首次加载自动运行一次,但首次加载的时候vuex还没拿到值,
  50. 导致表单数据一直显示不对,找到了半天,加了判断条件,
  51. 在vuex有值的时候,赋值就好了,我这里的表单数据时ref包裹的,
  52. 最好用ref不然赋值的时候响应式又是个麻烦。
  53. const store = useStore()
  54. watchEffect(()=>{
  55. visible.value = props.status
  56. if(store.state.tableData.key){
  57. formState.value=store.state.tableData
  58. }
  59. myTitle.value=formState.value.key?"人员编辑":"人员新增" //这是判断标题的
  60. })
  61. //然后就是点X或者保存的时候把表单数据清空,这里是antd自带的方法,
  62. 网上的方法好多都不好使
  63. import { Form} from 'ant-design-vue'; //先把表单引进来
  64. const useForm = Form.useForm;
  65. const { resetFields } = useForm(formState); 把重置函数解构出来
  66. 然后在关闭函数内调用就像
  67. const closeModal = () => {
  68. resetFields()
  69. context.emit("close") //这个是关闭表单的函数
  70. };

 最后在记录一下table 渲染按钮

  1. //关于按钮渲染也是找了好多方法,
  2. 什么插槽啊,customRender,不知道我为什么用时就是不好使,
  3. 看了半天antd文档照着写出来的
  4. <a-table
  5. :columns="columns" //目录数据
  6. :data-source="data" //表单数据
  7. >
  8. <template #bodyCell="{column,record}">
  9. //也不知道这个插槽为什么叫#bodyCell,照着写就对了
  10. <template v-if="column.dataIndex === 'operation'">
  11. //这里做一个条件判断,按钮目录标题是operation ,
  12. 所以判断按钮目录标题为operation时渲染按钮
  13. <a-space>
  14. <a-button type="primary" size="small"
  15. @click="edit(record)"
  16. >编辑</a-button>
  17. <a-button type="primary" danger size="small">删除</a-button>
  18. </a-space>
  19. </template>
  20. </template>
  21. </a-table>
  22. 目录数据
  23. const columns=[
  24. {
  25. title: 'NO.',
  26. dataIndex: 'number',
  27. key: 'number',
  28. customRender: (text:renderText) =>{
  29. return text.index+1
  30. },
  31. },
  32. {
  33. title: '姓名',
  34. dataIndex: 'name',
  35. key: 'name',
  36. },
  37. {
  38. title: '性别',
  39. dataIndex: 'gender',
  40. key: 'address',
  41. customRender: (text:renderText) =>{
  42. if(text.record.gender===1) return "男"
  43. else return "女"
  44. //这里用了customRender数据做了简单的渲染,
  45. 你这个怎么给的数据结构和官方文档不一样,我打印半天第二个参数,
  46. 一直是undefined 后来把text 打印一看,好家伙,record数据在里面呢
  47. },
  48. },
  49. {
  50. title: '部门',
  51. dataIndex: 'department',
  52. key: 'department',
  53. },
  54. {
  55. title: '出生年月',
  56. dataIndex: 'dateBirth',
  57. key: 'department',
  58. },
  59. {
  60. title: '薪水',
  61. dataIndex: 'salary',
  62. key: 'salary',
  63. },
  64. {
  65. title: '操作',
  66. key: 'operation',
  67. dataIndex: 'operation',
  68. width: '180px',
  69. //根本不用什么插槽来接,也不用customRender渲染,真是太神奇了
  70. },
  71. ]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/115520
推荐阅读
相关标签
  

闽ICP备14008679号