VueJS: Функция фильтра работает только при перезагрузке

#javascript #vue.js

#javascript #vue.js

Вопрос:

Когда мой веб-сайт загружает массив для моего поля выбора, он всегда возвращает все объекты внутри массива. Он должен фильтровать всех, кто уже зарегистрирован, но он работает только тогда, когда я нажимаю перезагрузку после перехода к просмотру.

Я совершенно не понимаю, почему, когда я перехожу на эту страницу, она загружает всех спортсменов. Когда я нажимаю клавишу F5, спортсмены фильтруются правильно.

router.js

 {
  path: '/events/:id/register/athletes',
  name: 'RegisterAthletes',
  component: () => import(/* webpackChunkName: "registerAthletes" */ '../views/RegisterAthletes.vue'),
  beforeEnter: async (to, from, next) => {
    if (!await isAuthorized()) next({ name: 'Login' });
    if (!await isGymManager()) next({ name: 'Error403' });
    else next();
  },
},
 

Вид

 <template>
  <select id="athlete" v-model="selectedAthlete" class="form-control">
    <option v-for="a in freeAthletes" :key="a.id" :value="a.id">
      {{ a.account.full_name }}
    </option>
  </select>
</template>

<script>
  methods: {
    freeAthletes() {
      return this.athletes.filter((athlete) => !this.registrations
        .map((reg) => reg.athleteId).includes(athlete.id));
    },
  },
  async mounted() {
    this.session = await this.$getSession();
    const eventId = this.$route.params.id;
    const gymId = this.session.gym_id;
    this.event = await this.$getEvent(eventId);
    this.gym = await this.$http.get(`gyms/${gymId}`).then((response) => response.data);
    this.athletes = await this.$getUnregisteredAthletes(eventId, gymId);
  }
</script>
 

функция

 Vue.prototype.$getUnregisteredAthletes = async function (eventId, gymId) {
  const allAthletes = await this.$http.get(`athletes?filter[gym_id]=${gymId}amp;expand=registrations`)
    .then((response) => response.data)
    .catch((error) => this.$log(error));
  return allAthletes.filter((athlete) => !athlete.registrations
    .map((reg) => String(reg.event_id)).includes(eventId));
};
 

Комментарии:

1. не freeAthletes должно быть computed вместо methods ?

2. да, создайте freeAthletes вычисляемое свойство.

3. На самом деле, это уже было вычислено.

4. Есть ли какие-либо ошибки javascript, о которых сообщается в консоли разработчика de browsers? Откуда берутся эти.registrations, на которые ссылается метод freeAthletes?