Как сделать прелоадер в Vue?

Как отловить момент когда отправлены все ajax запросы и получены ответы, что бы менять значение showPreloader с false на true и обратно?

Использую axios. Делаю SPA, и при переходе по страницам, значение showPreloader должно менять на true, пока не получу все ответы с отправленных запросов в API. Так должно быть единоразово , при created.
  • Вопрос задан
  • 5378 просмотров
Решения вопроса 2
@askhat
Если операций много и они асинхронны, можно воспользоваться паттерном Locking Pool:

const store = {
  state: {
    lockingPool: 0
  },
  getters: {
    isUiLocked: state => state.lockingPool > 0
  },
  mutations: {
    lockUi: state => state.lockingPool++,
    unlockUi: state => state.lockingPool--
  },
  actions: {
    async someAction ({ commit }) {
      commit('lockUi')
      const { data } = await http.get('/some-url')
      commit('unlockUi')
    }
  }
}
Ответ написан
lavezzi1
@lavezzi1
methods: {
  async fetchData() {
    this.showPreloader = true;
    const promises = this.items.map(item => axios.get('/api/items/${item.id}/'));
    const results = await Promise.all(promises);
    this.showPreloader = false;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы