Vue, добавление/увеличение времени в формате «xhxxm»

#javascript #vue.js

Вопрос:

Я пытаюсь создать простой интерфейс, в котором пользователь может увеличивать время, используя ряд опций, доступных в списке. Я работаю над тем, чтобы установить переменную vue в качестве времени, на которое они нажимают (т. Е. Если они нажимают » 30 м», то переменная отражает 30

Тем не менее, я хотел бы отобразить переменную в формате XhXXm (таким образом, 2 часа и 30 минут будут составлять 2 часа 30 минут). Хитрость в том, что если они выберут 15 м, затем 30 м, а затем 1 ч, на дисплее должно быть 1ч45 м.

Как бы я изменил это, чтобы на самом деле выполнить правильную итерацию и добавить выбранные элементы? Должен ли я добавить все это в минуты, а затем попытаться разбить его на пользовательский интерфейс?

 <ul class="time-list">
   <li style="margin-right:2px;"><a href="#" @click="addTime(15)"> 15m</a></li><span>|</span>
   <li style="margin-right:2px;"><a href="#" @click="addTime(30)"> 30m</a></li><span>|</span>
   <li style="margin-right:2px;"><a href="#" @click="addTime(45)"> 45m</a></li><span>|</span>
   <li style="margin-right:2px;"><a href="#" @click="addTime(60)"> 1h</a></li><span>|</span>
   <li><a href="#">---</a></li>
 </ul>

export default {
  data () {
    return {
        timeSpent: '0m',
    }
  },

  methods: {
    addTime(time){
       this.timeSpent = time;
    },
  }
}
 

Ответ №1:

Начните с интервала времени 0

 return {
    timeSpent: 0,
}
 

настройте свою функцию для добавления нового значения в счетчик

 addTime(time){
    this.timeSpent  = time;
},
 

и для форматирования вычисляемого свойства

 computed: {
    timeToDisplay(){
        return `${Math.floor(this.timeSpent/60)}h${this.timeSpent % 60}m`;
    },
}
 

наконец, чтобы отобразить

 {{ timeToDisplay }}