You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义Vue select组件中绑定并使用@change事件?

解决方案

你遇到的问题核心是自定义组件没有将内部v-select的change事件向外透传,父组件自然无法监听触发。可以按以下两种方案实现:


方案1:手动透传change事件

在你的自定义select组件的<v-select>标签上新增change事件监听,手动向外触发事件即可:

<v-select v-if="inputType === 'select'"
                  @input="updateValue($event)"
                  @change="$emit('change', $event)" <!-- 新增这一行 -->
                  :background-color="backgroundColor ? 'backgroundColor' : 'white'"
                  class="rounded-lg"
                  :clearable="clearable"
                  :chips="chips"
                  color="accent2"
                  :deletable-chips="deletableChips"
                  :disabled="disabled || isFormReadOnly"
                  :error="error"
                  :error-messages="errorMessages"
                  filled
                  flat
                  hide-details="auto"
                  :items="items"
                  :item-text="itemText && itemText"
                  item-value="value"
                  :label="label"
                  :multiple="multiple"
                  :outlined="!outlined && !isFormReadOnly"
                  :return-object="returnObject"
                  :small-chips="smallChips"
                  :value="value"/>

修改完成后,在调用组件时直接绑定@change事件即可触发自定义函数:

<app-input input-type="select"
           class="rounded-lg mb-4"
           :class="$vuetify.breakpoint.width >= 600 && 'pl-2'"
           :error="errors.type"
           :is-form-read-only="isFormReadOnly"
           :items="['Drill', 'Emergency']"
           label="Type"
           v-model="form.type"
           @change="你要触发的自定义函数名"/>

方案2:批量透传所有事件(适合通用封装场景)

如果你需要让自定义组件支持监听内部v-select的所有原生事件(比如@blur、@focus等),不需要逐个手动写emit,可以直接用事件透传语法:

  • Vue2环境:在<v-select>标签上加v-on="$listeners"
  • Vue3环境:在<v-select>标签上加v-bind="$attrs"(Vue3的$attrs已包含事件监听器)

Vue2环境示例:

<v-select v-if="inputType === 'select'"
                  @input="updateValue($event)"
                  v-on="$listeners" <!-- 新增这一行,透传所有父组件绑定的事件 -->
                  <!-- 其余原有属性保持不变 -->
                  :value="value"/>

注意事项

Vuetify的v-select组件中,@input事件会在值发生变化时立即触发,@change事件会在用户确认选中选项后触发,两者触发时机有差异,可根据业务需求选择监听对应的事件。


内容的提问来源于stack exchange,提问作者Richard KeMiKaL GeNeRaL Denton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:45:01