Установить значение по умолчанию для меню выбора опций
Я хочу привязать пользовательский атрибут к меню выбора опций. <option>
тег будет просто иметь атрибут selected="selected"
<template>
<div>
<select>
<option v-for="" v-bind:selected="[condition ? selected : notSelected]" value="">{{ resource.xprm_name }}</option>
</select>
</div>
</template>
data: {
selected: "selected",
notSelected: ""
}
Это не работает, но если я изменю v-bind:selected
в v-bind:class
затем он получает соответствующий класс, поэтому логика работает, но не с selected
приписывать.
Есть ли способ заставить его работать с такими пользовательскими атрибутами?
4 ответа
Вы можете просто использовать v-model
для выбора значения по умолчанию в окне выбора:
Разметка:
<div id="app">
<select v-model="selected">
<option value="foo">foo</option>
<option value="bar">Bar</option>
<option value="baz">Baz</option>
</select>
</div>
Посмотреть модель:
new Vue({
el: "#app",
data: {
selected: 'bar'
}
});
Вот JSFiddle: https://jsfiddle.net/Lxfxyqmf/
HTML:
<div id="myComponent">
<select v-model="selectedValue">
<option
v-for="listValue in valuesList"
selected="selectedValue = listValue"
:value="listValue.id"
>
@{{listValue.name}}
</option>
</select>
<span>Chosen item: @{{ selectedValue }}</span>
</div>
ЯШ:
var app = new Vue({
el: '#myComponent',
data: {
selectedValue: 'two',
valuesList: [
{name: 'One', id: 1},
{name: 'Two', id: 2},
{name: 'Three', id: 3},
]
},
Я создал многоразовый компонент select, который также передает значение modelValue родительскому компоненту.
Если вы посмотрите на первый тег option, вы увидите, как я создаю значение по умолчанию с помощью props.
BaseSelect.vue (дочерний компонент)
<template>
<label v-if="label">{{ label }}</label>
<select
class="field"
:value="modelValue"
v-bind="{
...$attrs,
onChange: ($event) => {
$emit('update:modelValue', $event.target.value);
},
}"
>
<option value="" disabled>{{ defaultValue }}</option>
<option
v-for="option in options"
:key="option"
:value="option"
:selected="option === modelValue"
>
{{ option }}
</option>
</select>
</template>
<script>
export default {
props: {
label: {
type: String,
default: ""
},
defaultValue: {
type: String,
default: "Select an item of the list",
required: false
},
modelValue: {
type: [String, Number],
default: "Otros"
},
options: {
type: Array,
required: true
},
},
};
</script>
Родительский компонент
<BaseSelect
label="Asunto"
defaultValue = "Selecciona un asunto"
v-model="contactValues.asunto"
:options="asuntos"
/>
Обратите внимание, что вы должны правильно получить это значение в своих данных () (v-модель)
Если вы используете композицию api
<template>
<div class="select">
<select v-model="selectedValue">
<option value="abc">
abc
</option>
<option value="cba">
cba
</option>
</select>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const analyticsDays = ref('cba');
return { analyticsDays };
},
};
</script>