您可以使用:value 将值绑定到每个<option>。
https://vuejs.org/v2/guide/forms.html#Select-Options
new Vue({
el: '#app',
data() {
return {
selected: null
}
}
});
<script src="https://unpkg.com/vue"></script>
<div id="app">
<select v-model="selected">
<option :value="null">Pick a value</option>
<option v-for="val in [true, false]" :value="val">{{val}}!!!</option>
</select>
<p>
Selected is the {{ typeof selected }}: {{ selected }}
</p>
</div>
如果需要,您可以为 v-for 内联编写数组。在您的原始示例中,它不起作用,因为您在字符串周围包含了双引号,但已经在属性周围使用了双引号。
对于这些值,您有很多选项可以将文本呈现为 True 和 False...
如果您只有两个值,true 和 false,我会倾向于完全放弃 v-for,并单独编写它们。
<option :value="null">Pick a value</option>
<option :value="true">True</option>
<option :value="false">False</option>
格式化文本的替代方法是使用过滤器或方法。那就是:
<option v-for="val in [true, false]" :value="val">{{ val | filter }}</option>
或
<option v-for="val in [true, false]" :value="val">{{ method(val) }}</option>
对于过滤器,您可以在组件的 filters 部分中定义它,对于方法,它应该在您的 methods 中。无论哪种方式,该函数只需将布尔值转换为字符串,然后将第一个字母大写即可。
// Obviously you wouldn't call it 'method'...
method (value) {
const str = String(value);
return str.charAt(0).toUpperCase() + str.slice(1);
}
也就是说,鉴于只有两种可能的选择,还有各种其他方法可以做到这一点。例如:
<option v-for="val in [true, false]" :value="val">{{ val ? 'True' : 'False' }}</option>