작은 타이머 Vue 구성 요소를 생성 중입니다. 사용자는 타이머를 시작하고 중지 할 수 있어야합니다.Vue를 사용하여 초 단위로 카운트 업
<template>
<div>
<a class="u-link-white" href="#" @click="toggleTimer">
{{ time }}
</a>
</div>
</template>
<script>
export default {
props: ['order'],
data() {
return {
time: this.order.time_to_complete,
isRunning: false,
}
},
methods: {
toggleTimer() {
var interval = setInterval(this.incrementTime, 1000);
if (this.isRunning) {
//debugger
clearInterval(interval);
console.log('timer stops');
} else {
console.log('timer starts');
}
this.isRunning = (this.isRunning ? false : true);
},
incrementTime() {
this.time = parseInt(this.time) + 1;
},
}
}
</script>
내가 타이머가 실행 여부를 결정하기 위해 isRunning
변수를 전환하고 있습니다 : 여기에 지금까지 내 구성 요소입니다. 첫 번째 클릭 (재생)에서 타이머가 시작되고 성공적으로 증가합니다.
그러나 두 번째 클릭 (일시 중지)에서 isRunning
var는 다시 전환되지만 clearInterval(this.incrementTime)
은 타이머를 일시 중지하고 타이머를 일시 중지하지 않습니다. 해당 디버거를 삽입하고 콘솔을 통해 수동으로 clearInterval(interval)
을 누르면 정의되지 않은 값을 반환합니다.
내 구성 요소의 형식을 잘못 지정 한 사람에 대한 통찰력이 있습니까?
당신은에서 반환 된 값을 저장해야합니다은'어딘가에 setInterval'. 지금은 변수를 선언했지만 함수가 끝나면 범위를 벗어납니다. 'this.interval = setInterval (...)'과'clearInterval (this.interval)'과 같은 것을 원할 것입니다. 또한 매번 간격을 만들지 마십시오. 실행 중이 지 않을 때 생성하고있을 때 삭제하십시오. – Bert