Quasar的q-select聚焦时报v-on无参数期望对象值错误如何解决?
错误原因
这个是Vue抛出的模板编译错误,根本原因是模板中存在未指定事件名的v-on绑定,也就是出现了类似v-on="非对象类型值"的非法语法。结合你使用q-select的场景,常见触发点有三个:
- 多余的
for属性:for是原生<label>标签的专属属性,q-select组件本身不支持该prop,部分版本的Quasar在解析未识别属性时存在bug,会将该属性错误解析为无参数的v-on绑定,触发报错。 - Quasar版本兼容性bug:Quasar v2早期版本(v2.0.0~v2.6.0)在
q-select同时使用use-input和fill-input属性时,内部输入框的事件绑定存在逻辑缺陷,聚焦时会触发该错误。 - 方法未定义:如果
filterCountryList或resetStateAndCityFields方法不存在、拼写错误,部分模板编译器会将事件绑定解析为异常的v-on语法。
修复方案
按优先级依次尝试以下操作:
- 移除q-select上多余的
for="registeredCountry"属性,若需要标识表单字段,改用id或name属性即可,修复后的组件代码参考:
<q-select ref="registeredCountry" id="registeredCountry" color="olab-brand-blue" v-model="registeredAddress.country" use-input fill-input hide-selected :options="countryOptions" @filter="filterCountryList" emit-value option-label="countryName" option-value="countryName" @update:model-value="resetStateAndCityFields('registeredAddress')" map-options />
- 检查
filterCountryList、resetStateAndCityFields两个方法是否在组件中正常定义,没有拼写错误。 - 若以上操作无效,升级Quasar到最新稳定版;如果不需要自动填充输入框宽度,也可以直接移除
fill-input属性规避bug。 - 确认组件数据初始化符合响应式要求:
registeredAddress提前声明country字段,countryOptions初始值设为空数组,不要设为undefined:
// data 初始化示例 data() { return { registeredAddress: { country: '' }, countryOptions: [] } }
内容的提问来源于stack exchange,提问作者Majesty
相关产品推荐
相关产品推荐

