【发布时间】:2021-10-08 03:08:21
【问题描述】:
我目前很难想出适当的逻辑来在 vue 中实现开始 - 结束年份。开始年份和结束年份都由两个单独的下拉列表表示。它们的功能都可以正常工作,但是我的问题在于根据设置的开始年份有条件地设置结束年份,反之亦然。这意味着如果从下拉列表中选择开始年份“2016”,则结束年份下拉列表将仅显示 2016 年到 2021 年之间的值。
Setyear.vue
<div class="detail-input start-end-dates">
<div class="year-picker">
<YearPicker :placeholder="'Voeg datum toe'"
:select-name="'startYear'"
:title="'Startdatum'"
:selected="educationInfo.startYear"
:earliest-date="currentYear - 50"
:latest-date="endYear"
:callback="setStartYear"/>
</div>
<div class="year-picker">
<YearPicker :placeholder="'Voeg datum toe'"
:select-name="'endYear'"
:title="'Einddatum'"
:selected="educationInfo.endYear"
:earliest-date="startYear ? startYear : currentYear - 50" // this section doesn't really work as although startYear is updated, it only returns the initial value of start year which is null
:latest-date="currentYear + 50"
:callback="setEndYear"/>
</div>
</div>
<script>
import YearPicker from "@/components/elements/YearPicker";
import {ref, computed, watch} from "@vue/composition-api";
export default {
name: "Setyear",
components: {YearPicker},
props: {
educationInfo: {
type: Object,
required: false
}
},
setup(props, {emit}) {
const currentYear = ref(0);
setCurrentYear();
function setCurrentYear() {
currentYear.value = new Date().getFullYear();
}
const startYear = ref(props.educationInfo.startYear ? props.educationInfo.startYear : null);
function setStartYear(year) {
startYear.value = year;
}
const endYear = ref(props.educationInfo.endYear ? props.educationInfo.endYear : null);
function setEndYear(year) {
endYear.value = year;
}
return {
startYear,
endYear,
currentYear,
setStartYear,
setEndYear,
}
},
}
YearPicker.vue
<template>
<div>
<h3 class="form-input-title">{{ title }}</h3>
<select name="startYear" id="startYear" :value="selected" class="form-input" @change="executeCallback">
<option></option>
<option v-for="year in validYears" :key="year" :value="year">{{year}}</option>
</select>
</div>
</template>
<script>
import {ref, onBeforeMount, watch, computed} from "@vue/composition-api";
export default {
name: "YearPicker",
props: {
title: {type: String},
callback: {type: Function},
selected: {type: [String, Number]},
earliestDate: {type: [Number, String],},
latestDate: {type: [Number, String]}
},
setup(props) {
onBeforeMount(calculateDateRange)
watch(() => props.earliestDate, (newValue, prevValue) => {
calculateDateRange();
});
// If there is a new value passed from the parent, the dropdown should display that new value.
watch(() => props.latestDate, (newValue, prevValue) => {
calculateDateRange()
});
function executeCallback(event) {
props.callback(event.target.value);
}
const validYears = ref([])
function calculateDateRange () {
for(let year = props.latestDate; year >= props.earliestDate; year--){
validYears.value.push(year)
}
}
return {
validYears,
executeCallback,
}
}
}
</script>
我认为不需要修改年份选择器组件,这就是我没有显示代码的原因。它仅循环多年以显示可用选项。我的问题与提出一个可靠的逻辑解决方案有关,该解决方案可以帮助我根据在任一下拉列表中选择的内容来限制年份。非常感谢您的建议!
【问题讨论】:
-
我在这里的代码中没有看到问题。问题是关于获得一个可靠的逻辑解决方案来限制年份,但您没有包括当前包含现有逻辑的 Yearpicker?
标签: javascript vue.js dropdown vuejs3