#vue.js #vuejs2 #vue-component
#vue.js #vuejs2 #vue-компонент
Вопрос:
у меня большая проблема: (Я создаю приложение для бронирования и пытаюсь зациклить даты в одном варианте и время в другом. Время должно иметь тот же идентификатор, что и дата для правильного времени. Я получаю даты и время api, и данные выглядят следующим образом:
"PossibleStartTimes": [{
"Date": "2019-03-06T00:00:00 01:00",
"Times": ["07:00:00", "08:00:00", "09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00"]
}, {
"Date": "2019-03-07T00:00:00 01:00",
"Times": ["07:00:00", "08:00:00", "09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00"]
}, {
"Date": "2019-03-08T00:00:00 01:00",
"Times": ["07:00:00", "08:00:00", "09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00"]
}, {
"Date": "2019-03-11T00:00:00 01:00",
"Times": ["07:00:00", "08:00:00", "09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00"]
}, {
"Date": "2019-03-12T00:00:00 01:00",
"Times": ["07:00:00", "08:00:00", "09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00", "16:00:00"]
},
Вот фрагмент из моего компонента vue:
<b-select
@input="onChange($event)"
v-model="selectedDate"
size="is-medium"
expanded
>
<option disabled value>Välj Datum</option>
<option
v-for="(PossibleStartTime, index) in PossibleStartTimes"
:key="PossibleStartTime.date"
>{{ index }} {{ PossibleStartTime.Date }}</option
>
</b-select>
<div class="times">
<h2 class="title is-3">Välj tid</h2>
<b-select size="is-medium" v-model="selectedTime" expanded>
<option disabled value>Välj Tid</option>
<option
v-for="(PossibleStartTime, index) in PossibleStartTimes"
:key="PossibleStartTime.time"
>{{ index }} {{ PossibleStartTime.Times }}</option
>
</b-select>
Моя идея заключается в том, что когда клиент выбирает дату, тогда время будет зацикливаться на идентификаторе даты во втором «b-select» : (
Я использую Buefy, и время должно отображаться только на основе того, какую дату выбрал клиент.
Надеюсь, кто-нибудь понимает, что я имею в виду 🙂
Комментарии:
1.
b-select
? Вы используете Buefy или Bootstrap?2. В этом случае буферный!
Ответ №1:
Вот один из возможных подходов:https://jsfiddle.net/umjLv0zq/2 /
Я использовал стандартное select
вместо b-select
, но в данном случае это не должно иметь значения.
Что я сделал:
-
Я удалил
@input="onChange($event)"
из вашегоselect
. Это не должно быть необходимо, если оно связано с property черезv-model
. -
Я добавил
:value
привязку кPossibleStartTime.Date
в каждой опции. Если вы не укажете это, вашv-model
будет связан с тем, что находится внутри<option>here</option>
внесения вашихselectedDate
изменений в{{ index }} {{ PossibleStartTime.Date }}
. Вам не должен быть нужен индекс там, верно? -
Я добавил новое
computed
свойство, которое находит массив,Times
связанный сselectedDate
. Если день найден, он возвращает егоTimes
или пустой массив в противном случае. -
И, наконец, второй
select
(илиb-select
в вашем случае) имеет параметры, основанные на вычисляемом свойстве.
Кстати. ваш :key
привязан либо к Date
, либо к времени / часу в вашем Times
массиве. Подумайте, действительно ли они уникальны.
Комментарии:
1. Ты сделал мой день! 🙂
2. У меня есть еще одна небольшая проблема, когда маршрут к «calender-route» извлекает даты и время, тогда я получаю ошибку при рендеринге: «TypeError: не удается прочитать свойство ‘find’ неопределенного»,
3. возможно, мне следует добавить значение по умолчанию для выбранной даты exampel index[0]:S
4. Это другая проблема, и вам действительно следует начать новую тему для этого, но, короче говоря, вы должны убедиться, что для вашего
PossibleStartTimes
по умолчанию в вашем[]
установлено значениеdata
по умолчанию.find
это метод массива, поэтому вы должны использовать его для существующего массива. Когда вы извлекаете свои данные, вы должны назначить ихPossibleStartTimes
, и они будут пересчитаны.