Я создаю регистрационную форму с помощью VueJS! Пользователь должен ввести дату своего рождения.
Итак, как я могу сгенерировать годы с 1900 по текущий год в элементе <select>?
Я пробовал это:
new Vue ({
el: '.container',
methods: {
getCurrentYear() {
return new Date().getFullYear();
}
}
});<div class = "container">
<select id = "dob">
<option value = "0">Year:</option>
<option v-for = "year in getCurrentYear()" :value = "year">{{ year }}</option>
</select>
</div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>Однако в этом случае год начинается с 1. Итак, как я могу пройти через <option> с годом, начиная с 1900 года?
@nnnnnn Нет, я не хочу этим пользоваться.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать v-if:
<option v-for = "year in getCurrentYear()" v-if = "year >= 1900" :value = "year">{{ year }}</option>
v-if в элементе v-for. Это плохо!new Vue ({
el: '.container',
computed : {
years () {
const year = new Date().getFullYear()
return Array.from({length: year - 1900}, (value, index) => 1901 + index)
}
}
})<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div class = "container">
<select id = "dob">
<option value = "0">Year:</option>
<option v-for = "year in years" :value = "year">{{ year }}</option>
</select>
</div>Я подумал, был ли v-if хорошим подходом. Теперь ваш ответ проясняется. Большое спасибо. Помечено как ответ :)
v-if оценивается для каждого элемента в массиве, что в большинстве случаев является бесполезным. Вычисленные свойства запоминаются, поэтому они оцениваются только один раз и «обновляются» при изменении какой-либо переменной в нем (реактивность). Если вы используете метод непосредственно внутри v-for, он оценивается каждый раз, когда что-то изменяется в вашем компоненте, что очень дорого;)
Понятно! Спасибо. Выбор между computed и methods для меня действительно запутанная задача.
mounted(){
this.inittahun();
},
computed : {
inittahun() {
let years = [];
for (var i = 2001; i <= new Date().getFullYear(); i++) {
years.push(i );
}
this.years = years;
},
<select2 v-model = "form.tahun">
<option value = "">----</option>
<option :value = "year" v-for = "year in years" :key = "year">
{{ year }}
</option>
</select2>
Постарайтесь описать, почему предложенное вами решение подойдет для указанной проблемы.
Почему вы не используете
<input type = "date">?