将默认值设置为选项 select 菜单
Set default value to option select menu
我想将自定义属性绑定到选项 select 菜单。
<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
,那么它会收到适当的 class,因此逻辑有效,但不适用于 selected
属性。
有什么方法可以使其与此类自定义属性一起使用?
您可以只使用 v-model
来 select 在 select 框上设置默认值:
标记:
<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" :value="listValue">
{{listValue}}
</option>
</select>
<span>Chosen item: {{ selectedValue }}</span>
</div>
js:
var app = new Vue({
el: '#myComponent',
data: {
selectedValue: 'Two',
valuesList: ['One', 'Two', 'Three']
},
使用新的合成API:
<template>
<select v-model="selectValue">
<option value="a">
Option a
</option>
<option value="b">
Option b
</option>
</select>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
// Create a reactive value for our select
const selectValue = ref('a');
// Return to the template
return { selectValue };
},
};
</script>
我创建了一个 select 的可重用组件,它也将 modelValue 发送到父组件。
如果您查看第一个选项标签,您会看到我是如何使用 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"
/>
请注意,您必须在 data() (v-model) 中正确接收此值
我想将自定义属性绑定到选项 select 菜单。
<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
,那么它会收到适当的 class,因此逻辑有效,但不适用于 selected
属性。
有什么方法可以使其与此类自定义属性一起使用?
您可以只使用 v-model
来 select 在 select 框上设置默认值:
标记:
<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" :value="listValue">
{{listValue}}
</option>
</select>
<span>Chosen item: {{ selectedValue }}</span>
</div>
js:
var app = new Vue({
el: '#myComponent',
data: {
selectedValue: 'Two',
valuesList: ['One', 'Two', 'Three']
},
使用新的合成API:
<template>
<select v-model="selectValue">
<option value="a">
Option a
</option>
<option value="b">
Option b
</option>
</select>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
// Create a reactive value for our select
const selectValue = ref('a');
// Return to the template
return { selectValue };
},
};
</script>
我创建了一个 select 的可重用组件,它也将 modelValue 发送到父组件。
如果您查看第一个选项标签,您会看到我是如何使用 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"
/>
请注意,您必须在 data() (v-model) 中正确接收此值