el-form中实现动态rules切换

510 阅读1分钟

需求背景:

在表格中内嵌输入框,并对输入框进行规则校验。

模板结构上采用在el-table外层包上el-form来实现表单校验功能。

实现界面效果图大概如下:

image.png

这里有一点要求,只有勾选的行才需要进行非空以及其他校验。

解决思路

单元格的模板结构如下:

<el-form ref="tableForm" :model="tableForm" size="small">
<el-table :data="tableForm.tableData">
    // ...
    <el-table-column label="ID帧(hex)" width="150px">
        <template slot-scope="scope">
          <el-form-item :prop="`tableData.${scope.$index}.canId`" :rules="scope.row.checked ? rules.hexValue : rules.unknown">
            <el-input v-model="scope.row.canId" placeholder="请输入" />
          </el-form-item>
        </template>
    </el-table-column>
    // ...
</el-table>
</el-form>

这里的关键代码就是rules属性,通过选中状态来切换hexValueunknown的规则。

rules对象如下:

rules: {
    hexValue: [
      { required: true, message: '请输入', trigger: 'blur' },
      {
        pattern: /^[0-9a-fA-F]{8}$/,
        message: '请输入8位十六进制数',
        trigger: 'blur'
      }
    ],
    positiveInteger: [
      { required: true, message: '请输入非零正整数', trigger: 'blur' },
      {
        pattern: /^[1-9]\d*$/,
        message: '请输入非零正整数',
        trigger: 'blur'
      }
    ],
    unknown: [{ required: false, message: '请输入', trigger: 'blur' }]
  }

到这里就能实现上述的效果。

求助

但是这里有一点想不通的就是unknown规则。当它为null或者空数组时,就实现不了想要的效果。希望知道的朋友帮我解惑??