Я создаю интерфейс для системы бронирования пациентов с Vue. js, который представляет собой просто динамическую c веб-форму. Сначала пользователь выбирает тип treatment
, затем practitioner
, который он хочет видеть, и, наконец, время appointment
. Все данные получены с помощью вызовов API RESTful с использованием ax ios.
. Доступные параметры в каждом поле формы фильтруются с использованием предыдущего выбора. Например, пользователю будет предоставлено только доступное время его выбранного практикующего, а практикующий может быть выбран только из группы практиков, которые могут выполнить выбранную процедуру.
Фильтрация практикующих на основе выбранного лечение работает просто отлично.
Однако фильтрация встреч по выбранному практикующему не работает - он не синхронизирован c: встречи загружаются для ранее выбранного практикующего. Я проверил бэкэнд, что нормально, и вызовы API выполняются синхронно c (т. Е. person_id
соответствует идентификатору недавно выбранного практикующего).
Что вызывает эту проблему и как исправить это?
Вот код Vue. js, который выполняет эту фильтрацию:
var app = new Vue({
el: '#app',
data: {
appointments: [],
practitionerId: 0,
practitioners: [],
treatmentId: 0,
treatments: [],
},
mounted: function () {
axios.get('/api/treatments')
.then(response => this.treatments = response.data);
},
watch: {
// filter available practitioners by the selected treatment
treatmentId: function () {
// get the allowed role ids for the selected treatment
var allowedRoleIds = '';
const allowedRoles = this.treatments[this.treatmentId - 1]['allowed_roles'];
for (var i = 0; i < allowedRoles.length; i++) {
allowedRoleIds += allowedRoles[i]['id'];
if (i + 1 < allowedRoles.length) {
allowedRoleIds += ',';
}
}
// load the practitioners using the allowed role ids
axios.get('/api/people?role_ids=' + allowedRoleIds)
.then(response => this.practitioners = response.data);
},
// filter the available appointments by the selected practitioner
practitionerId: function () {
axios.get('/api/appointments?person_id=' + this.practitionerId)
// ERROR!!! This is out of sync.
.then(response => this.appointments = response.data);
}
}
});