@MikUrrey

Как загрузить конфиг в Vuex до срабатывания VueRouter?

Всем привет!
Суть проблемы: нужно в хранилище Vuex загрузить с сервера конфиг, который должен быть подхвачен в том числе и роутером. Но, как ни крути, роутер срабатывает раньше, чем любые хуки. Код:

Vue.config.productionTip = false;
Vue.use(VueRouter);
new Vue({
  vuetify,
  store,
  router,
  render: h => h(App),
  async beforeCreate() {
    console.log("Config loading");
    let store = this.$store;
    try {
      let result = await store.dispatch("config/loadMain");
      if (store.getters["user/isAuthenticated"]) {
        return await store.dispatch("config/loadExtra");
      }
      return result;
    } catch (error) {
      store.dispatch("error/raiseHttpError", error);
    }
  }
}).$mount("#app");


Как это можно решить?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Загружайте конфиг до инициализации приложения:

store.dispatch('config/loadMain').then(() => {
  new Vue({
    ...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
У меня в quasar так, адаптируется, в принципе, не сложно (например редиирект на /loading с параметром, откуда редиректим а отуда обратно по триггеру из watch). И да, знаю, что у меня костыльный костыль :)

import { Loading } from "quasar";

function aSecond() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
    }, 1000);
  });
}

export default ({ router, store, Vue }) => {
  router.beforeEach(async (to, from, next) => {
    if (store.state.catalog.loading) Loading.show();
    while (store.state.catalog.loading) {
      await aSecond();
    }
    Loading.hide();
////
};
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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