vue.js - 在 v-for 中为每个结果创建倒计时
问题描述
我有一个循环,在其中我从我的 API 调用中得到了几个结果。他们每个人都有一个名为的属性,该属性processing_time
显示距离发生某事还剩多少秒。
如何实现每个间隔的倒计时?
这是我的<progressbar>
组件,它需要一个初始显示进度的值(我需要它是动态的)
<progress-bar :options="options"
:value="data.properties.processing_time"
/>
<span class="progress-bar-seconds"
>{{ data.properties.processing_time }} Seconds left
...</span>
我觉得我需要使用computed
,但我不知道该怎么做。
解决方案
计算道具可能不是最佳解决方案,因为您需要在本地更改计时器值。我建议使用定期更新的本地副本:
- 创建一个本地数据属性 (a
ref
)。 - 安装时将道具复制
value
到本地数据道具。 - 用于
setInterval
定期递减值。
<template>
<div>
<span class="progress-bar-seconds">{{ seconds }} Seconds left ...</span>
</div>
</template>
<script>
import { ref, onMounted, onUnmounted } from 'vue'
export default {
props: {
value: {
type: Number,
default: 0,
required: true,
},
},
setup(props) {
const seconds = ref(0) // 1️⃣
let _timerId = null
onMounted(() => {
seconds.value = props.value // 2️⃣
if (seconds.value > 0) {
// 3️⃣
_timerId = setInterval(() => {
seconds.value--
if (seconds.value <= 0) {
clearInterval(_timerId)
}
}, 1000)
}
})
onUnmounted(() => clearInterval(_timerId))
return { seconds }
}
}
</script>
推荐阅读
- database - 加速 Access 数据库
- scala - 访问映射函数内的 scala 列表的索引和值
- node.js - 对 Revolut API 进行身份验证
- r - 删除有条件的行
- alfresco - 允许用户在 Alfresco Share 中保存查询/搜索参数
- ios - iOS Mapbox 在拖动注释时更新地图会将注释恢复为原始坐标
- ios - CoreImage CIKMeans CIFilter 异常
- php - 即使包可用,Yum 也会抛出依赖错误
- .net-core - 在公共交通中使用带有请求/响应的主题
- c++ - std::span 构造函数,libcxx 与 libstdc++,模板与非模板?