v-model有一个select。最初是null。在option中,我也指定了null作为默认值-一切正常,默认值被替换。但是当我把这个select放到一个单独的组件中时,由于某种原因它停止使用null,默认选项没有被替换。链接到文档:https://vuejs.org/guide/components/v-model.html
父组件中的调用:
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>
1.我尝试显式替换空值
<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>
1.我尝试在调用时使用v-model的扩展版本
Parent.vue
<filter-trashed-select :modelValue="filters.trashed.fieldValue"
@update:modelValue="newValue => filters.trashed.fieldValue= newValue"/>
1.但如果您将此select从组件中取出,并在Parent.vue中显式使用它,那么一切都将正常工作
使用Vue SFC Playground上的问题简化示例。
在组件中,你需要使用v模型,但是你不能在属性上使用它,要做到这一点,在数据中创建一个变量。
<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>
1条答案
按热度按时间ogq8wdun1#
我建议你选择其他的东西作为默认值
null
。Null不是一个值,不应该被当作值。Null是没有值。如果您在选择选项中使用null作为值,那么Vue将使用选项的文本作为值。检查下面的游戏,如果您选择了第一个选项,
showValue()
将如何打印“Only active”。有趣的是,
:value="modelValue"
和v-model="modelValue"
的行为是不同的。检查一下这两个选择对选择第一个选项的React。目前我还没有对此的解释。最好的解决方案是为prop使用某个
default
值,并对其进行验证以设置默认值。以及
null
仍然不好通过,因为它甚至不引起验证发生。这里我也不知道为什么会这样。最好使用undefined
而不是null
,因为undefined
引起验证发生。查看以下Vue SFCPlayground了解详情。
一个一个二个一个一个一个三个一个一个一个一个一个四个一个