Vuetify.js Средство выбора даты устанавливает допустимые даты для каждого средства выбора даты в массиве

#javascript #vue.js #vuetify.js

#javascript #vue.js #vuetify.js

Вопрос:

У меня есть этот метод toAllowedDates, который позволяет datepicker выбирать только диапазон дат с интервалом всего в 1 день. Я пытался решить эту проблему почти полдня, но безуспешно. Это поможет, если я смогу получить какие-либо мнения. Возможно, мой способ сделать это изначально неверен.

 methods: {
  toAllowedDates(val) {
    // I need the index here but if I pass the index in the loop it will not pass the value
    const today = this.$moment(this.schedules[index].dayFrom, "YYYY-MM-DD")
    const maxAllowedDate = today.clone().add(1, "days")
    const currentDate = this.$moment(val)
    return !today.isAfter(currentDate) amp;amp; !currentDate.isAfter(maxAllowedDate)
    }
  }
  

по умолчанию это передаст значения val (day1 ~ day30)

 <template v-for="(schedule, index) in schedules">
  <sw-calendar-range 
   :value="[schedule.workdayDateFrom, schedule.workdayDateTo]"
   :to-allowed-dates="toAllowedDates"
   @input="updateWorkdaySchedule(['workdayDateFrom', 'workdayDateTo'], index, $event)">
  </sw-calendar-range>
</template>
  

что я пытался передать индекс методу toAllowedDates, но безуспешно

 <template v-for="(schedule, index) in schedules">
  <sw-calendar-range 
   :value="[schedule.workdayDateFrom, schedule.workdayDateTo]"
   :to-allowed-dates="toAllowedDates(val, index)"
   @input="updateWorkdaySchedule(['workdayDateFrom', 'workdayDateTo'], index, $event)">
  </sw-calendar-range>
</template>
  

Ответ №1:

В итоге я создал функцию для каждой разрешенной даты. Я надеюсь, что это поможет кому-нибудь в будущем.

в моих данных я создал пустой массив для своих методов

 data: () => ({
    ...
    newMethods: []
  }),
  

в моих методах

 setAllowedDatesTo(idx) {
      this.$set(this.allowedDates, 'To'   idx, val => {
        const today = this.$moment(this.formWorks.workdaySchedules[idx].workdayDateFrom, "YYYY-MM-DD")
        const maxAllowedDate = today.clone().add(1, "days")
        const currentDate = this.$moment(val)
        return !today.isAfter(currentDate) amp;amp; !currentDate.isAfter(maxAllowedDate)
      })
    }
  

Ответ №2:

Попробуйте это

prop:

     :to-allowed-dates="(val) => toAllowedDates(val, index)"
  

Методы:

 toAllowedDates(val, index) {
    const today = this.$moment(this.schedules[index].dayFrom, "YYYY-MM-DD")
    const maxAllowedDate = today.clone().add(1, "days")
    const currentDate = this.$moment(val)
    return !today.isAfter(currentDate) amp;amp; !currentDate.isAfter(maxAllowedDate)
}