【发布时间】:2021-04-23 21:22:04
【问题描述】:
假设我正在制作一个包含<select> 的简单组件。此组件支持v-model,如文档中的here。
Vue.component('custom-select', {
template: '#component',
props: ['options', 'value'],
});
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script type="text/x-template" id="component">
<div id="component">
<select :value="value" @input="$emit('input', $event.target.value)">
<option v-for='option in options' :value="option">
<slot v-bind="{ option }"></slot>
</option>
</select>
</div>
</script>
如果选项是字符串,这很好用。但是,如果它们是不同的类型(例如对象),则发出的值将转换为字符串(例如 '[object Object]')。这是因为$event.target.value 从 DOM 中拉取值,它始终是字符串类型。
有没有办法获得所选<option> 的原始绑定值?我知道v-model 是一个选项,但它使事情变得复杂,因为它需要添加观察者。
编辑我发现 Vue 似乎将原始绑定值分配给 DOM 节点上的 _value 属性,但我不确定访问它是否是一个好主意,因为它是下划线前缀,似乎没有记录。
【问题讨论】: