Вы столкнулись с одним из предостережений при обнаружении изменений, изложенных здесь:
https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats
В частности, в этой строке:
this.showLeft[this.tasks[i].id] =
days + " D " + hours + " H " + minutes + " M " + seconds + " S ";
Объект this.showLeft
пусто при создании в data
, поэтому у него не будет никаких реактивных свойств.Он отлично работает, если вы измените его на следующее:
this.$set(
this.showLeft,
this.tasks[i].id,
days + " D " + hours + " H " + minutes + " M " + seconds + " S "
)
Это говорит Vue добавить реактивное свойство к showLeft
, чтобы пользовательский интерфейс обновлялся при его изменении.
Альтернативабудет каждый раз создавать новый объект:
// Somewhere near the top of updateCurrentTime
const showLeft = {};
// ... set values on showLeft instead of this.showLeft
this.showLeft = showLeft
Лично я думаю, что я бы больше использовал для этого вычисленные свойства, чем пытался бы делать все внутри updateCurrentTime
.Я не могу быть более конкретным, учитывая, что код неполный.