我试图使用一种计算方法total
来计算单词数并乘以price
。
price
是通过访问API的方法获得的。
但是计算方法不使用更新的数据price
。返回为空。
var app = new Vue({
el: '#app',
data: {
text: '',
qualidade: '',
selected: '',
options: [],
lang1: '',
lang2: '',
ola: '',
price: ''
},
beforeCreate: function() {
axios.get('/languages.json')
.then((response) => {
this.options = response.data
})
},
computed: {
total: function() {
return (this.words * this.preco).toLocaleString('de-DE')
},
words: function() {
if(this.text.length == 0) {
return 0
} else {
this.words = this.text.split(' ').length
console.log(this.words)
return this.text.split(' ').length
}
}
},
methods: {
price: function () {
axios.post('/service/price', {
lang_origem: this.lang1,
lang_dest: this.lang2
})
.then(function (response) {
this.preco = response.data.price
console.log(this.price)
})
.catch(function (error) {
console.log(error);
});
}
}
})
答案 0 :(得分:1)
我可以在您的代码中看到的问题,
price
的属性,它们会发生冲突。preco
没有反应。如果它不是反应性的,则更改其值将不会更新依赖于它的计算值。您应该将preco
添加到数据中以使其具有反应性。this
中的this.preco = ...
不会引用Vue实例答案 1 :(得分:0)
this.preco
尚未完成, axios.post('/service/price' ...)
将为空,您需要将其重写为更新this.total
的方法
像这样:
{
methods: {
calcTotal: function () {
this.price()
.then(() => {
this.total = (this.words * this.preco).toLocaleString('de-DE')
})
},
price: function () {
//return so that we can wait on this to be finished
return axios.post('/service/price', {
lang_origem: this.lang1,
lang_dest: this.lang2
})
.then(function (response) {
this.preco = response.data.price
console.log(this.price)
})
.catch(function (error) {
console.log(error);
});
}
}
}