Как управлять роутером находясь в App.vue
Здравствуйте, я могу сменить страницу роутера с момошю
this.$router.push({ name: "Empty" });
Но как мне ето сделать нахотясь в App.vue (без export default) То что находится у меня в App.vue
<script>
this.$router.push({ name: "Empty" }); //$router == undefined
</script>
|
Добавить "export default", очевидно:
<script>
export default {
created() {
this.$router.push({ name: "Empty" });
}
}
</script>
Только зачем? Весь базовый роутинг должен в маршрутах и прописан быть. Там есть редиректы. |
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 - рейдж может дергать функции находящиеся в глобальном контексте), (дергая функции он может передавать в них параметры - ето такой аналог сокетам и фетч) Так как ето игра а не сайт роутером приходится управлять с помощю функций а не ссылок |
|
А могу ли я создать чтото типа события с параметрамми?
|
Ну например: https://www.npmjs.com/package/vue-bus
|
Спасибо вам за подсказки, долго експерментируя я придумал такой костыль
в 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 создавался быстрее них |
Очевидный ответ - не вызывать функции раньше времени.
Особенно роутер - так делать вообще нельзя. Любые умолчание и редиректы в самих роутах прописывайте, как я указал ещё в первом ответе. Вы можете создать 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, время: 11:08. |