Хорошо, давайте сделаем это.
Как мы видим в VTimePicker, есть свойство selecting
, которое является перечислением [1,2,3] для hour
, minutes
, seconds
.
У нас нет прямого доступа к этим данным, и для них нет API в интерфейсе компонента. Но могут ли такие вещи остановить таких славных исследователей, как мы? Конечно, нет.
Мы можем видеть обработчик onChange
, который делает все, после того, как timePicker был изменен.
onChange (value: number) {
this.$emit(`click:${selectingNames[this.selecting]}`, value)
const emitChange = this.selecting === (this.useSeconds ? SelectingTimes.Second : SelectingTimes.Minute)
if (this.selecting === SelectingTimes.Hour) {
this.selecting = SelectingTimes.Minute
} else if (this.useSeconds && this.selecting === SelectingTimes.Minute) {
this.selecting = SelectingTimes.Second
}
if (this.inputHour === this.lazyInputHour &&
this.inputMinute === this.lazyInputMinute &&
(!this.useSeconds || this.inputSecond === this.lazyInputSecond)
) return
const time = this.genValue()
if (time === null) return
this.lazyInputHour = this.inputHour
this.lazyInputMinute = this.inputMinute
this.useSeconds && (this.lazyInputSecond = this.inputSecond)
emitChange && this.$emit('change', time)
},
Очевидно, что в нашем сценарии использования нам нужно, чтобы что-то, что нужно просто запустить this.$emit('change', time)
в конце, так что мы можем, как настоящие старожилы, сделать следующее:
<v-time-picker
ref="timePicker"
full-width
format="24hr"
v-model="picked"
>
</v-time-picker>
mounted() {
this.$refs.timePicker.onChange = function () {
this.$emit(`click:${selectingNames[this.selecting]}`, value)
if (this.inputHour === this.lazyInputHour &&
this.inputMinute === this.lazyInputMinute &&
(!this.useSeconds || this.inputSecond === this.lazyInputSecond)
) return
const time = this.genValue();
if (time === null) return;
this.lazyInputHour = this.inputHour;
this.lazyInputMinute = this.inputMinute;
this.useSeconds && (this.lazyInputSecond = this.inputSecond);
this.$emit('change', time);
}.bind(this.$refs.timePicker);
Мы должны сделать все, что странно bind
coz Vue proxy this
, чтобы экземпляр компонента, но эта штука сделает всю работу.
Кстати, вам даже не нужно обрабатывать allowedMinutes
, потому что пользователь никогда туда не доберется.