写一个vue2组件,功能为选择时间段,时间格式为时:分,比如‘16:30’第一个选择器选择起始时间,第二个选择器选择结束时间,起始时间必须小于结束时间,当选择完成后返回 ‘起始时间-结束时间‘的字符串
时间: 2024-02-24 12:27:32 浏览: 79
好的,以下是一个简单的实现:
```vue
<template>
<div>
<select v-model="startHour">
<option v-for="hour in hours" :value="hour">{{ hour }}</option>
</select>
:
<select v-model="startMinute">
<option v-for="minute in minutes" :value="minute">{{ minute }}</option>
</select>
-
<select v-model="endHour">
<option v-for="hour in hours" :value="hour">{{ hour }}</option>
</select>
:
<select v-model="endMinute">
<option v-for="minute in minutes" :value="minute">{{ minute }}</option>
</select>
<button @click="submit">确认</button>
</div>
</template>
<script>
export default {
data() {
return {
hours: [],
minutes: [],
startHour: '',
startMinute: '',
endHour: '',
endMinute: ''
}
},
created() {
// 初始化小时和分钟的选项值
for (let i = 0; i <= 23; i++) {
this.hours.push(i < 10 ? '0' + i : i.toString())
}
for (let i = 0; i <= 59; i++) {
this.minutes.push(i < 10 ? '0' + i : i.toString())
}
},
methods: {
submit() {
// 判断起始时间是否小于结束时间
if (this.startHour > this.endHour || (this.startHour === this.endHour && this.startMinute >= this.endMinute)) {
alert('起始时间必须小于结束时间')
return
}
// 拼接时间段字符串并返回
const startTime = this.startHour + ':' + this.startMinute
const endTime = this.endHour + ':' + this.endMinute
this.$emit('select', startTime + '-' + endTime)
}
}
}
</script>
```
使用方法:
```vue
<template>
<div>
<time-picker @select="handleSelect"></time-picker>
<div v-if="timeSelected">{{ timeSelected }}</div>
</div>
</template>
<script>
import TimePicker from './TimePicker.vue'
export default {
components: {
TimePicker
},
data() {
return {
timeSelected: ''
}
},
methods: {
handleSelect(timeRange) {
this.timeSelected = timeRange
}
}
}
</script>
```
注意事项:
- 为了方便,这里使用了基于模板字符串的字符串拼接,如果需要支持更多的时间格式,可以根据实际情况进行修改。
- 时间选择器的选项值是通过循环生成的,如需自定义选项值,可以在 data 中定义数组,然后在 created 阶段把需要的值 push 到数组中即可。
阅读全文