Quasar循环渲染q-select校验选中后错误不清除问题
问题根因
校验规则写法错误,同时存在响应式更新隐患:
q-select的rules校验函数入参val是当前单个选择器绑定的value值,也就是v-for循环里对应的单个user对象,不是整个users数组。你写的!!val[index]相当于在user对象上查找数字索引属性,user对象里不存在这类属性,无论是否选中用户,校验永远返回失败,错误提示自然无法清除。- 原有
onSelect方法直接修改数组项的内部属性,在Vue2场景下可能无法触发响应式更新,导致组件校验状态不刷新。
修复步骤
- 修正校验规则,直接判断当前选择器的value是否为有效用户即可,移除错误的
[index]取值:
<!-- 替换原有q-select上的rules配置 --> :rules="[val => (!!val && !!val.id && val.username !== '') || 'Please select a user']"
- 调整
onSelect方法的更新逻辑,使用$set更新数组项,保证响应式正常触发:
onSelect(value, selectedIndex) { this.$set(this.users, selectedIndex, { username: value.username, id: value.id }) this.$emit( "update:user", this.users.length > 0 ? this.users.map(user => ({ id: user.id })) : [] ); },
可选优化
v-for循环不建议用index作为key,删除用户时会出现组件复用问题,可以在新增用户时生成唯一临时ID作为key,避免渲染异常。
内容的提问来源于stack exchange,提问作者BilendM
相关产品推荐
相关产品推荐

