使用 Vue.js 将多个数字输入相加
Adding together multiple number inputs using Vue.js
我希望将多个输入加在一起,到目前为止我已经得到了两个结果。
首先使用输入计算结果将输入的每个数字加在一起。
其次使用 v-model 就像将复选框放入数组中一样,但所有的框最终都相互匹配。
那里的一小段代码如下:
<template>
<div class="panel panel-default">
<div class="panel-heading">{{credits}}</div>
<div v-for="meal in title">
<input v-bind:id="meal" v-model.number="used_credits" type="number">{{used_credits}}
<div class="panel-body">
</div>
</div>
</template>
谢谢
好吧,这有点棘手。在模板循环中使用 v-model 时,我们必须确保每次迭代分配的模型都不同。否则所有输入都将绑定到完全相同的模型实例。
我们可以通过使用一个对象来实现这一点,该对象存储所有模型并通过循环中可用的键访问这些模型。
这是一些代码(基于您的代码段):
<template>
<div>
<div>{{ credits }}</div>
<div v-for="meal in meals">
<input :id="meal" v-model.number="creditsPerMeal[meal]" type="number">
</div>
<div>
Credits used: {{creditsSum}}
</div>
</div>
</template>
<script>
export default {
name: 'test-component',
data: function () {
let meals = [
'pizza', 'pasta', 'salad'
]
let creditsPerMeal = {}
for (let meal of meals) {
creditsPerMeal[meal] = 0
}
return {
credits: 10,
meals,
creditsPerMeal
}
},
computed: {
creditsSum () {
return Object.values(this.creditsPerMeal).reduce((a, b) => a + b, 0)
}
}
}
</script>
棘手的部分是应该存储我们模型的对象必须是 pre-initialized 和所有键。如果不是这种情况,计算的 属性 creditsSum
将不会更新。
请记住,如果您通过道具或其他方式动态获取餐点,这可能不起作用。如果您必须这样做,请考虑使用监视函数而不是我在代码段中使用的计算 属性。
请参阅 this part of the documentation for more information about the change detection of Vue and this part 关于计算属性与观察者的信息。
编辑:
如果您没有使用 Babel 之类的转译器,您可能必须将所有 let
替换为 var
和上面代码段中的循环:
var meals = [
'pizza', 'pasta', 'salad'
]
var creditsPerMeal = {}
for (var i = 0; i < meals.length; i++) {
creditsPerMeal[meals[i]] = 0
}
我希望将多个输入加在一起,到目前为止我已经得到了两个结果。
首先使用输入计算结果将输入的每个数字加在一起。
其次使用 v-model 就像将复选框放入数组中一样,但所有的框最终都相互匹配。
那里的一小段代码如下:
<template>
<div class="panel panel-default">
<div class="panel-heading">{{credits}}</div>
<div v-for="meal in title">
<input v-bind:id="meal" v-model.number="used_credits" type="number">{{used_credits}}
<div class="panel-body">
</div>
</div>
</template>
谢谢
好吧,这有点棘手。在模板循环中使用 v-model 时,我们必须确保每次迭代分配的模型都不同。否则所有输入都将绑定到完全相同的模型实例。 我们可以通过使用一个对象来实现这一点,该对象存储所有模型并通过循环中可用的键访问这些模型。 这是一些代码(基于您的代码段):
<template>
<div>
<div>{{ credits }}</div>
<div v-for="meal in meals">
<input :id="meal" v-model.number="creditsPerMeal[meal]" type="number">
</div>
<div>
Credits used: {{creditsSum}}
</div>
</div>
</template>
<script>
export default {
name: 'test-component',
data: function () {
let meals = [
'pizza', 'pasta', 'salad'
]
let creditsPerMeal = {}
for (let meal of meals) {
creditsPerMeal[meal] = 0
}
return {
credits: 10,
meals,
creditsPerMeal
}
},
computed: {
creditsSum () {
return Object.values(this.creditsPerMeal).reduce((a, b) => a + b, 0)
}
}
}
</script>
棘手的部分是应该存储我们模型的对象必须是 pre-initialized 和所有键。如果不是这种情况,计算的 属性 creditsSum
将不会更新。
请记住,如果您通过道具或其他方式动态获取餐点,这可能不起作用。如果您必须这样做,请考虑使用监视函数而不是我在代码段中使用的计算 属性。
请参阅 this part of the documentation for more information about the change detection of Vue and this part 关于计算属性与观察者的信息。
编辑:
如果您没有使用 Babel 之类的转译器,您可能必须将所有 let
替换为 var
和上面代码段中的循环:
var meals = [
'pizza', 'pasta', 'salad'
]
var creditsPerMeal = {}
for (var i = 0; i < meals.length; i++) {
creditsPerMeal[meals[i]] = 0
}