Quasar表单规则中能否为校验函数传递额外参数?
在Quasar表单规则中给校验函数传递额外参数
当然可以给Quasar的表单校验函数传递动态参数,常用两种实现方式:
方法1:使用闭包生成带参数的校验函数
先定义一个返回校验函数的工厂函数,把动态上限作为参数传入:
// 生成校验函数的工厂方法 const createCheckLimitRule = (limit) => { return (v) => { // 校验逻辑:勾选数量不超过上限则通过,否则返回错误提示 return v.length <= limit || t('checked-to-much') } }
然后在模板中调用这个工厂函数,传入动态参数(比如从prop中获取上限值):
<q-field outlined v-else-if="prop.component === 'checkbox'" class="q-gutter-sm" v-model="dataRef[key]" :label="prop.label" :rules="[createCheckLimitRule(prop.maxCheckLimit)]" > <q-option-group style="margin-top:20px;" :options="prop.options" type="checkbox" v-model="dataRef[key]" /> </q-field>
方法2:在模板中用箭头函数直接传递参数
直接在rules数组中用箭头函数包装校验逻辑,把额外参数传入:
// 带参数的校验函数 const isCheckLimit = (v, limit) => { return v.length <= limit || t('checked-to-much') }
模板修改为:
<q-field outlined v-else-if="prop.component === 'checkbox'" class="q-gutter-sm" v-model="dataRef[key]" :label="prop.label" :rules="[(v) => isCheckLimit(v, prop.maxCheckLimit)]" > <q-option-group style="margin-top:20px;" :options="prop.options" type="checkbox" v-model="dataRef[key]" /> </q-field>
注意事项
- 原代码的校验逻辑存在错误:
return v.length > 2 || t('checked-to-much')会导致勾选超过2个时校验通过,这和需求相反,上述示例已修正为v.length <= limit返回true(校验通过)。 - 方法1的闭包方式更推荐,不会在每次组件渲染时创建新函数实例,性能更优;方法2适合简单场景,但频繁渲染的组件可能有微小性能损耗。
内容的提问来源于stack exchange,提问作者Ben Jerry
相关产品推荐
相关产品推荐

