Задача
Когда у меня есть v-model
в HTML <select>
, v-model
устанавливает заданное свойство для выбранных значений, сохраняя типы этих значений - если я связываю число с <option>
, свойство модели устанавливается нумерации, если я связываю объект, он устанавливается на этот объект.
<script>
export default {
data: {
options: [5, 10, 15, 'text', { 'description': 'I am an Object' }],
}
};
</script>
<template>
<select v-model="model">
<option
v-for="option in options"
:value="option"
>
{{ option }}
</option>
</select>
<template>
У меня есть пользовательский компонент <base-select>
, который оборачивается для меня использованием тега <select>
. Я пытаюсь реализовать то же самое поведение v-model
для него, но не могу, потому что типы не сохраняются - мне возвращаются строки все время, даже когда я связываю числа или объекты.
//// BaseSelect.vue
<script>
export default {
props: {
options: {
type: Array,
required: true
},
value: {
required: true
}
},
};
</script>
<template>
<select
:value="value"
@input="$emit('input', $event.target.value)"
>
<option
v-for="option in options"
:value="option"
>
{{ option }}
</option>
</select>
</template>
//// App.vue
<script>
@import 'BaseSelect' from './BaseSelect';
export default {
components: {
BaseSelect,
},
data: {
options: [5, 10, 15, 'text', { 'description': 'I am an Object' }],
}
};
</script>
<template>
<base-select
v-model="model"
:options="options"
/>
<template>
Fiddle
Вот где это поведение хорошо видно: http://jsfiddle.net/4o67pzLs/14/
Первый выбор - сохранение типов значений, привязанных к модели, в то время как второй выбор - все значения времени, устанавливаемые в строки.
Вопрос * * 1023
Можно ли реализовать v-model
на пользовательском компоненте, который бы сохранял типы? Если да, то как?