Vue3+Ts结合ant-design+tailwindcss来实现一个复杂表格数据的渲染,包括查看和表格表单提交

最近在阅读别人的项目中,碰到一个挺有趣的地方,就是ant-design去渲染一个复杂类型的表格,先看一下官方实例的默认表格是怎样的?

 默认的表格就是在对应的表头所属位置显示对应的内容即可,而且代码也是非常简洁的。

<a-table :dataSource="dataSource" :columns="columns" />

当然了。为了满足自定义的开发需求,我们也可以使用插槽的形式,在想要显示的列显示想要的内容。

例如希望表格的第一列显示的是索引。

const colums = [
  {
    title: "序号",
    dataIndex: "index",
  },
  {
    title: "姓名",
    dataIndex: "name",
  },
  ...
  ...
]
    <a-table
      :columns="colums"
      :dataSource="newData"
    >
      <template #bodyCell="{ column, record, text, index }">
        <template v-if="column.dataIndex === 'index'">
          <span>
            {
   
   { index }}
          </span>
        </template>
      </template>
    </a-table>

用插槽的方式即可控制让它显示索引。我们不妨大胆一些,将这个表格渲染的更加复杂一些,究竟有多复杂呢,请看下面的图片。

 

这里是列表页,在教育背景一列,通过点击每个小图标可以展开对应的教育背景信息。 

点击新增按钮,添加一条新数据,编辑页面如图:

 这是一个基于列表形式的表单,一般用于提交很多条数据时使用比较方便,在教育背景一列中,默认是只展示了条小学的空数据,

点击新增教育背景,可以继续添加学校类型,这里我做了限制,最多只能添加到大学,而且不可修改,只能是这四种类型,也可以点击删除按钮,删除当前的教育背景记录。

每一行记录的最右边又有两个按钮,分别是添加任职经历和添加获奖项目。例如点击添加任职经历后,在学校名称下面又会增添新的表格用来存放添加的任职数据,同样可以点击删除按钮来删除当前的任职记录。新增获奖项目的操作亦是如此。

 

 这就是属于一种复杂表格的渲染,它完全按照自定义的需求去实现想要的功能,输入完基本数据后,点击确定。列表页便新增了一条我们刚刚编辑的数据。

 

 当然了。这里的很多个功能其实还是不够完善了,源码我放到文章最后,下面我分享一下实际的几个问题和注意事项:

  1. 用v-for遍历数据时,最好遍历数组,不要遍历对象,否则会有意想不到得到错误。
    1. 使用v-for也可以遍历对象,但是这样遍历的索引就是对象的属性名了,而对象的属性名是string类型的,但是 v-for="(item,index) in data " :key="index",它的索引index是number类型的,如果涉及到一些跟索引有关的操作时,就会报错。
    2. let data = {
      
      A:{},
      B:{},
      C:{}
      }

      如上定义了一个类数组对象,使用v-for遍历,index就是A、B、C,他们是string类型

      <div v-for="(item,index) in data" :key="index">
          <span v-if="index==='A'">aaa</span>
          <span v-if="index==='B'">bbb</span>
          <span v-if="index==='C'">ccc</span>
      </div>

      然后用index去判断操作时,运行就会报错,报错的大概就是:string类型的数据不能和number类型的比较,我试了很多方法,== , toString 等,还是不行,因为index本身就是number类型的。

  2. 为每一条记录设置一个key,这个很关键,后面做增删改查也好,包括页面上单独控制每一条记录,如展开收起等。
  3. 表单校验,每一个a-form-item只能绑定一个校验数据,不能是有两个以上的输入项

由于记录的id是写死的,没有用随机数生成,因此后面需要继续改善。

https://gitee.com/liu-yunshun/vue3--ts-learning-demo.git

猜你喜欢

转载自blog.csdn.net/weixin_48914380/article/details/129021665