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

Vue.js中如何为含null值的Select组件设置默认选项?

问题:封装后的Select组件null默认值不生效

我有一个绑定v-model的select组件,初始值为null,同时为默认选项指定null值时,默认值可正常显示。但将该select封装为独立组件后,null值的默认选项无法正常生效。

父组件调用代码(Parent.vue)

<filter-trashed-select v-model="filters.trashed.fieldValue"/>

封装后的子组件代码(FilterTrashedSelect.vue)

<template>
    <div class="reference__filter-select-wrapper">
        <select class="form-select" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)">
            <option :value="null">{{ $t('Only active') }}</option>
            <option value="only">{{ $t('Only hidden') }}</option>
            <option value="with">{{ $t('All') }}</option>
        </select>
    </div>
</template>

<script>
export default {
    name: "FilterTrashedSelect",
    props: ['modelValue'],
    emits: ['update:modelValue']
}
</script>

尝试过的解决方案

  • 显式设置select的value为null
<template>
    <div class="reference__filter-select-wrapper">
        <select class="form-select" :value="null" @input="$emit('update:modelValue', $event.target.value)">
            <option :value="null">{{ $t('Only active') }}</option>
            <option value="only">{{ $t('Only hidden') }}</option>
            <option value="with">{{ $t('All') }}</option>
        </select>
    </div>
</template>

<script>
export default {
    name: "FilterTrashedSelect",
    props: ['modelValue'],
    emits: ['update:modelValue']
}
</script>
  • 使用v-model的完整写法调用组件
<filter-trashed-select :modelValue="filters.trashed.fieldValue"
  @update:modelValue="newValue => filters.trashed.fieldValue= newValue"/>
  • 将select直接写在父组件中,功能正常

已在Vue SFC Playground制作简化复现示例。

最终解决方案

问题根源在于直接将props的modelValue绑定到select的:value上,原生select对null值的处理和Vue响应式机制存在冲突。需要在组件内部通过data变量中转,使用v-model绑定内部变量,再同步到父组件:

<template>
  <select v-model="test" @change="$emit('update:modelValue', $event.target.value)">
    <option :value="null">null</option>
    <option value="1">1</option>
  </select>
</template>
<script>
export default {
  props: ["modelValue"],
  emits: ["update:modelValue"],
  data() {
    return {
      test: this.modelValue
    }
  }
};
</script>

内容的提问来源于stack exchange,提问作者Semyon Yanichev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:45:04