element plus表格嵌套表单校验绑定prop的问题

参考:Vue3 element-plus表单嵌套表格实现动态表单验证_何极光的博客-CSDN博客

也不能说表格里嵌套表单吧…虽然页面形式是表格里嵌套的表单,但其实数据结构还是表格数据tableData在表单数据form里

const form = reactive({tableData:[{}]})

说回表单校验prop的问题,

看了一下参考文章的大致思路就兴冲冲自己去写了,结果。。

给el-form-item绑定prop必须这么写

:prop="`tableData.${$index}.type`"

而不能这么写

:prop="tableData[$index].type"

会报tableData未定义的错误。为什么呢?同样是访问数组中的元素的方法呀?

可以页面打印一下tableData,发现它的类型typeof一下并不是数组,而是对象。

也不能使用 :prop="form.tableData[$index].type" 去访问,语法是正确的(eslint不报错),但实际上访问不到,即表格第一行绑定的不是第一行,第二行绑定的不是第二行,不清楚它绑定的啥,但可以确定的是,它绑定的是一个固定的值,不能根据index变化

我明白了:

探索过程是在页面上打印一下:

使用tableData.${$index}.type访问:

使用form.tableData[$index].type访问:

非常直观。

第一种访问方式和第二种访问方式的目标在根本上是不同的

第一种访问方式访问的是索引/字段名,

第二种访问方式访问的是值,

(键值对)

prop绑定的应该是那个特殊的索引啊!我完全明白了。

这样做的前提是,可以这么访问,毕竟,tableData.${$index}.type也太奇怪了吧!数组.0.type?好奇怪啊

好在它不是数组,而是对象——为什么它是对象?

其实它不是对象,即使你用typeof去判断类型返回了object。

事实上,它是一个对象数组 Object[]

它是一个包含对象的数组,并且每个对象中都有type这个属性,所以可以使用这种语法tableData.${$index}.type

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Element Plus的表单校验,你可以按照以下步骤实现: 1. 在表单中使用`<el-form>`标签包裹需要校验表单元素。 2. 为每个需要校验表单元素添加`v-model`指令来绑定表单数据。 3. 使用`rules`属性为每个表单元素定义校验规则,`rules`是一个对象,键名为表单元素的字段名,键值为校验规则数组。 4. 在校验规则数组中,可以使用不同的校验方法,如`required`、`min`、`max`、`pattern`等。 5. 可以通过`message`属性为校验规则定义错误提示信息。 下面是一个简单的示例代码: ```html <template> <el-form :model="form" :rules="rules" ref="form"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="form.password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { username: '', password: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 20, message: '密码长度在 6 到 20 个字符', trigger: 'blur' } ] } }; }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单校验通过,执行提交操作 console.log('表单校验通过'); } else { // 表单校验不通过,给出错误提示 console.log('表单校验不通过'); } }); } } }; </script> ``` 在上述示例中,`form`对象是表单数据的模型,`rules`对象定义了表单元素的校验规则。`submitForm`方法用于提交表单,其中通过`this.$refs.form.validate`方法来触发表单校验,并在回调函数中处理校验结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值