问题描述
切换下拉框选项时,被选中项的值是字符串类型,不是数值类型,导致2+5=25。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>demo1</title>
<script src="../lib/vue.js"></script>
</head>
<body>
<div id="root">
<select v-model="x">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
+
<select v-model="y">
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
={{sum}}
</div>
<script>
new Vue({
el:"#root",
data(){
return {
x:1,
y:4
}
},
computed:{
sum(){
return this.x+this.y;
}
}
})
</script>
</body>
</html>
解决办法
解决办法有二,分别是
v-model.number
- value前面加冒号,即
:value
,让vue将引号内的内容当js表达式处理。
第一种解决办法,v-model.number
<div id="root">
<select v-model.number="x">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
+
<select v-model.number="y">
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
={{sum}}
</div>
第二种解决办法,:value
<div id="root">
<select v-model="x">
<option :value="1">1</option>
<option :value="2">2</option>
<option :value="3">3</option>
</select>
+
<select v-model="y">
<option :value="4">4</option>
<option :value="5">5</option>
<option :value="6">6</option>
</select>
={{sum}}
</div>