我正在练习vue.js
的简单待办事项列表。我正在尝试对数组中的所有price
求和。为此,我在computed
内写了一个小函数,
但出了点问题,这是我的js
:
var app= new Vue({
el: "#app",
data: {
message: "Lista della spesa",
seen: true,
todos: [
{msg: 'prezzemolo', price: 10},
{msg: 'pomodori', price: 20},
{msg: 'zucchine', price: 5}
],
},
methods: {
addToDo: function() {
if(this.nome && this.prezzo) {
this.todos.push({msg: this.nome, price: this.prezzo});
}
this.nome = "";
this.prezzo = "";
},
RemoveThis: function(index) {
this.todos.splice(index,1);
}
},
computed: {
totale: function() {
var total = 0;
this.todos.forEach(function() {
total += this.todos.price
});
return total;
}
}
});
forEach
内部有什么东西打破了这个功能,有人知道为什么吗?
答案 0 :(得分:5)
在您传递给forEach
的回调函数中,this
无法指向该组件,默认情况下为undefined
。
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
回调函数接收每个todo
作为参数,因此示例如下所示:
totale: function(){
var total = 0;
this.todos.forEach(function (todo) {
total += todo.price
});
return total;
}
一般来说,我不会使用forEach,我会使用reduce。与箭头功能一起,它成为一个很好的单行:
totale: function () {
return this.todos.reduce((sum, todo) => sum + todo.price, 0)
}
答案 1 :(得分:3)
错误使用forEach
e.g。
var total = 0;
var arrayOfObjects = [{price: 10},{price: 20},{price : 30}];
// Correct usage:
arrayOfObjects.forEach(function(obj) {
total += obj.price;
})
console.log(total)

答案 2 :(得分:0)
替换代码
this.todos.forEach(function(){
total += this.todos.price
});
到
this.todos.forEach(function(data){
total += data.price
});