我有一个显示加密货币的简单组件,我希望每秒更新一次(并反映更新的值)。我可以显示金额,但我每秒加1的功能不起作用。我用alert()
之类的其他东西进行了测试,结果正常。是我的选择器吗?
<template>
<div>
<ul class="crypto-list">
<li v-for="(currency, idx) in currencies" :key="idx" class="currency">
<span class="currency__acronym">{{ currency.acronym}} </span>
<h2 class="currency__name">{{ currency.name }}</h2>
<span class="currency__amount"> {{ currency.amount }} </span>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'Cryptocurrency',
data() {
return {
currencies: [{
name: 'Ethereum',
acronym: 'ETH',
amount: 1,
},{
name: 'ICON',
acronym: 'ICX',
amount: 40,
},{
name: 'Nano',
acronym: 'XRB',
amount: 14,
}],
};
},
mounted () {
this.addNumber();
},
methods: {
addNumber: function() {
setInterval(function() {
this.currencies[0].amount += 1;
this.currencies[1].amount += 1;
this.currencies[2].amount += 1;
}, 1000);
},
},
};
</script>
答案 0 :(得分:1)
这里的问题是传递给setInterval
函数的函数有不同的上下文。我们可以使用.bind
显式分配传递给setInterval
的函数的上下文。
addNumber: function() {
setInterval(function(){
++this.currencies[0].amount;
++this.currencies[1].amount;
++this.currencies[2].amount;
}.bind(this), 1000);
},
修改强>
对于ES6及更高版本,您可以使用arrow function syntax。
addNumber() {
setInterval(() => {
++this.currencies[0].amount;
++this.currencies[1].amount;
++this.currencies[2].amount;
}, 1000);
},
答案 1 :(得分:0)
使用setInterval
,每隔x
秒运行一次,在你的情况下为1秒,因为你传递了1000
作为间隔的参数。