表格渲染直接使用element中的表格,按照官网给的格式直接就渲染出来了,但是奈何后台给我返回的是一列对应一条数据,本来想着转换格式就行,途中又遇到校验无效,代码如下
后台返回的数据格式:

// An highlighted block
export const tableDataTest = [
  { 'name': '第一列', 'a1': 11, 'a2': 12, 'a3': 13, 'a4': 14, 'a5': 15 },
  { 'name': '第二列', 'a1': 21, 'a2': 22, 'a3': 23, 'a4': 24, 'a5': 25 },
  { 'name': '第三列', 'a1': 31, 'a2': 32, 'a3': 33, 'a4': 34, 'a5': 35 },
]

在这里插入图片描述
如上图,后台返回的每条数据对应的是表格的每一列,我们要想用el-table就需要数据转化,处理方法如下:

// An highlighted block
    transformData() {
      const arr = []
      for (let i = 0; i < 5; i++) { // 因为我的行数是固定的,直接写死了
        arr[i] = []
      }
      const len = this.tableDataTest.length
      for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < len; j++) {
          arr[i][j] = this.tableDataTest[j]['a' + (i + 1)]
        }
      }
      this.form.tableDataCol = arr
      this.colData = this.tableDataTest.map(item => item.name)
    },

数据处理好后就直接在表格渲染了

// An highlighted block
 <el-form ref="form" :model="form">
      <el-table :data="form.tableDataCol" border style="width: 100%;margin-top: 40px">
        <el-table-column type="index" width="60"></el-table-column>
        <el-table-column v-for="(colTitle,index) in colData" :key="index" :label="colTitle">
          <template slot-scope="{row, $index }">
            <el-form-item :prop="`tableDataCol[${$index}][${index}]`" :rules="[{ required: true, message: '请输入',trigger:'blur'}]">
              <el-input v-model.trim="row[index]"></el-input>
            </el-form-item>
          </template>
        </el-table-column>
      </el-table>
    </el-form>

重点来了,因为我开始是只是在data里面定义一个form:{},想着下面处理数据会给this.form.tableDataCol赋值的,结果发现校验一直不生效,找了好半天,发现如果只是定义form:{},
下面在对form.tableDataCol赋值数据不是双向绑定的,即使你页面的值和data里的值都改变的,但是你校验取到的值还是最开始你赋值的

// An highlighted block
data() {
    return {
      form: {
        tableDataCol: []  // 切记一定要记得定义这个key
      },
      colData: []
    }
  },

补充:又遇到一个赋值校验不通过的问题。因为有一个功能是用户点击,自动把没有输入的输入框补充为0,切记要用字符串’0’,不要用数字0否则校验不通过,代码如下
在这里插入图片描述

  handleSupplement() {
   this.searchForm.taxPlanEntityList.forEach(row => {
      row.replyLimitAccount = row.replyLimitAccount ? row.replyLimitAccount : '0'
      row.replyOwner = row.replyOwner ? row.replyOwner : '0' 
    })
  },
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐