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

Vue3中如何让自定义下拉选择组件支持v-model双向绑定?

实现方案

完全可以实现,v-model本质是属性绑定+事件监听的语法糖,只需对子组件做少量调整即可,分Vue3和Vue2两种场景说明:

Vue3 配置步骤

  1. 子组件新增接收modelValue属性,这是v-model默认绑定的属性名
  2. 选中时触发update:modelValue事件抛出选中值,替换原有selected事件即可,若需要保留原事件可同时触发两个事件

子组件示例代码(script setup写法)

<script setup>
const props = defineProps({
  items: {
    type: Array,
    required: true
  },
  // 新增v-model对应的接收属性
  modelValue: {
    type: [String, Number, Object], // 根据你实际选中值的类型调整
    default: null
  }
})
const emit = defineEmits(['update:modelValue', 'selected']) // 保留selected可兼容旧写法

// 原有选中触发逻辑
const handleSelect = (get) => {
  emit('update:modelValue', get) // 给v-model用的事件
  emit('selected', get) // 可选,保留原有事件供其他场景使用
}
</script>

父组件调用写法

<DropdownSelect :items="items" v-model="something" />

绑定的something变量即可直接拿到子组件的选中值。

Vue2 配置步骤

  1. 子组件新增接收value属性,这是Vue2 v-model默认绑定的属性名
  2. 选中时触发input事件抛出选中值

子组件示例代码

<script>
export default {
  props: {
    items: {
      type: Array,
      required: true
    },
    // 新增v-model对应的接收属性
    value: {
      type: [String, Number, Object], // 根据实际选中值类型调整
      default: null
    }
  },
  methods: {
    handleSelect(get) {
      this.$emit('input', get) // 给v-model用的事件
      this.$emit('selected', get) // 可选,保留原有事件
    }
  }
}
</script>

父组件调用写法和Vue3一致,直接使用v-model绑定变量即可。

内容的提问来源于stack exchange,提问作者Rade Iliev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:54:02