Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Как управлять роутером находясь в App.vue (https://javascript.ru/forum/css-html/82477-kak-upravlyat-routerom-nakhodyas-v-app-vue.html)

fori 13.05.2021 18:18

Как управлять роутером находясь в App.vue
 
Здравствуйте, я могу сменить страницу роутера с момошю
this.$router.push({ name: "Empty" });

Но как мне ето сделать нахотясь в App.vue (без export default)
То что находится у меня в App.vue
<script>
this.$router.push({ name: "Empty" }); //$router == undefined
</script>

Aetae 13.05.2021 21:54

Добавить "export default", очевидно:
<script>
export default {
  created() {
    this.$router.push({ name: "Empty" });
  }
}
</script>

Только зачем? Весь базовый роутинг должен в маршрутах и прописан быть. Там есть редиректы.

fori 13.05.2021 22:54

Aetae, Спасибо, ето работает, но могу ли я в таком случае вызвать из функции вне export default функцыю которая находится в methods, тоесть сделать так
<script>
export default {
  methods: {
    changePage() {
      this.$router.push({ name: "Empty" });
    },
  },
};
vue.changePage(); //Проблемма в том что контекст Vue-undefined, a this не является контекстом vue Component
</script>

Тоесть первая функция вызова должна находится на глобальном контексте, ето необходимо из-за rage-браузера (движка для создания интерфейса игры gta 5 - рейдж может дергать функции находящиеся в глобальном контексте), (дергая функции он может передавать в них параметры - ето такой аналог сокетам и фетч)
Так как ето игра а не сайт роутером приходится управлять с помощю функций а не ссылок

Aetae 13.05.2021 23:23

https://qna.habr.com/q/988393?e=1124...r_item_1945479

fori 13.05.2021 23:56

А могу ли я создать чтото типа события с параметрамми?

Aetae 14.05.2021 00:15

Ну например: https://www.npmjs.com/package/vue-bus

fori 14.05.2021 13:28

Спасибо вам за подсказки, долго експерментируя я придумал такой костыль
в main.js я добавиил
const app = new Vue({
  router,
  store,
  i18n,
  render: (h) => h(App),
}).$mount("#app");

global.app = app;


global.app.$router.push({ name: "Authorization" });

Тоесть я присвоил глобальной переменной екземпляр app, и могу вызывать его из глобального контекста - единственное что глобальные функции исполняются перед созданием app, тоесть при попытке обратится к global.app я могу получить undefined если app ище небыл создан
Могу ли я сделать чтото что позволит моим функциям исполнятся только после того как app создан ну или сделать так чтоб app создавался быстрее них

Aetae 14.05.2021 19:48

Очевидный ответ - не вызывать функции раньше времени.
Особенно роутер - так делать вообще нельзя.
Любые умолчание и редиректы в самих роутах прописывайте, как я указал ещё в первом ответе.

Вы можете создать new Vue в самом начале индексного файла, а $mount сделать потом. Однако если вызовы будут ещё раньше то это не поможет - распределяйте приоритеты загрузки и выполняйте свои функции только когда vue готов.
Вы можете захреначить в самом верху страницы костыль, который предварительно вместо методов подставляет пустышки, или какое-нить извращение типа
function getNoop(){
    const retSelf = function() { 
      return noop
    };
    const noop = new Proxy(retSelf, {
      set: () => true,
      defineProperty: retSelf,
      get: retSelf
    });
    return noop;
  }

  global.app = getNoop();
, но зачем если туда можно саму инициализацию Vue поместить?


Часовой пояс GMT +3, время: 14:45.