為了了解上下文,我有一個表格顯示來電和每個呼叫的等待時間。資料數組如下所示:
[ { id: 1, patient_name: lorem ipsum, created_at: 2022-02-02 09:10:35, ... }, { id: 2, patient_name: dolor ipsum, created_at: 2022-02-02 09:00:35, ... } ]
我試圖弄清楚如何為每個物件分配 setTimeout,但我完全迷失了。
到目前為止,我發現可以透過觀察者來製作計數器,但這當然只能充當「全域」計數器。
watch: { timerCount: { handler (value) { if (value > 0) { setTimeout(() => { this.timerCount++ }, 1000) } }, immediate: true // This ensures the watcher is triggered upon creation } },
有沒有辦法使用函數來顯示每個物件上的計數器?我在想這樣的事情:
<template> <span v-for="call in calls" :key="call.id"> Requested at: {{ call.created_at }} waiting time: {{ showWaitingTime(call.created_at) }} // <- Not sure if this can be done </span> </template> ... <script> .... methods: { showWaitingTime (created_at) { // get diff in seconds between created_at and now // do something here with a timeOut() to increment the object property... } } </script>
此外,我想以 HH:mm:ss
格式返回等待時間。
一種解法是用
<span>
包裝{{ showWaitingTime(call.created_at) }}
,即key
ed 在timerCount
上,以便當timerCount
更改時重新渲染<span>
(從而再次呼叫showWaitingTime
來計算新的時間字串) : p>在範本中,使用
<span>
包裝時間戳字串,該key
綁定到timerCount
:waiting time: {{ showWaitingTime(call.created_at) }}
在
calls
上的觀察程式中,使用setInterval
啟動週期性計時器。在啟動新計時器之前以及卸載元件時,請務必使用clearInterval
停止計時器。您在
timerCount
上的觀察程式正在有效地實作setInterval
。刪除該程式碼,因為步驟 2 中的程式碼已消除了該程式碼。在
showWaitingTime()
中,根據給定時間與現在的差值計算HH:mm:ss
:示範 p>