Vue 计算属性,加法与连接问题
Vue computed properties, issues with addition vs concatenation
刚刚学习 Vue,我偶然发现了一个有趣的行为,我想知道为什么会发生这种情况以及如何避免它。
<template>
<div>
<input type="number" v-model="a" style="color: white" />
<input type="number" v-model="b" style="color: white" />
<p style="color: white">{{ c }}</p>
</div>
</template>
<script>
export default {
data() {
return {
a: 1,
b: 2
};
},
computed: {
c: function() {
return this.a + this.b;
}
}
};
</script>
在第一次渲染时,'c' 显示为“3”,这是我所期望的。但是,如果我更改其中一个输入,则这两个数字将连接在一起。例如,如果我将 'a' 更改为“11”,我的预期值为 13,但我得到的是“112”。为什么会这样?
只需使用 Number
对象构造函数来求和 :
computed: {
c: function() {
return Number(this.a) + Number(this.b);
}
}
这两个操作数被视为字符串,当您尝试在它们之间放置 +
时,它们将被连接起来,为了避免默认行为尝试使用 Number
构造函数或 parseInt
, parseFloat
函数将行为更改为求和运算。
或尝试在 v-model
指令中使用 number
修饰符,例如:
<input type="number" v-model.number="b" style="color: white" />
刚刚学习 Vue,我偶然发现了一个有趣的行为,我想知道为什么会发生这种情况以及如何避免它。
<template>
<div>
<input type="number" v-model="a" style="color: white" />
<input type="number" v-model="b" style="color: white" />
<p style="color: white">{{ c }}</p>
</div>
</template>
<script>
export default {
data() {
return {
a: 1,
b: 2
};
},
computed: {
c: function() {
return this.a + this.b;
}
}
};
</script>
在第一次渲染时,'c' 显示为“3”,这是我所期望的。但是,如果我更改其中一个输入,则这两个数字将连接在一起。例如,如果我将 'a' 更改为“11”,我的预期值为 13,但我得到的是“112”。为什么会这样?
只需使用 Number
对象构造函数来求和 :
computed: {
c: function() {
return Number(this.a) + Number(this.b);
}
}
这两个操作数被视为字符串,当您尝试在它们之间放置 +
时,它们将被连接起来,为了避免默认行为尝试使用 Number
构造函数或 parseInt
, parseFloat
函数将行为更改为求和运算。
或尝试在 v-model
指令中使用 number
修饰符,例如:
<input type="number" v-model.number="b" style="color: white" />