Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2021, 18:18
Кандидат Javascript-наук
Отправить личное сообщение для fori Посмотреть профиль Найти все сообщения от fori
 
Регистрация: 27.01.2021
Сообщений: 112

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

Но как мне ето сделать нахотясь в App.vue (без export default)
То что находится у меня в App.vue
<script>
this.$router.push({ name: "Empty" }); //$router == undefined
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2021, 21:54
Аватар для Aetae
Любитель
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,764

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

Только зачем? Весь базовый роутинг должен в маршрутах и прописан быть. Там есть редиректы.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 13.05.2021, 22:54
Кандидат Javascript-наук
Отправить личное сообщение для fori Посмотреть профиль Найти все сообщения от fori
 
Регистрация: 27.01.2021
Сообщений: 112

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 - рейдж может дергать функции находящиеся в глобальном контексте), (дергая функции он может передавать в них параметры - ето такой аналог сокетам и фетч)
Так как ето игра а не сайт роутером приходится управлять с помощю функций а не ссылок

Последний раз редактировалось fori, 13.05.2021 в 23:07.
Ответить с цитированием
  #4 (permalink)  
Старый 13.05.2021, 23:23
Аватар для Aetae
Любитель
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,764

https://qna.habr.com/q/988393?e=1124...r_item_1945479
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 13.05.2021, 23:56
Кандидат Javascript-наук
Отправить личное сообщение для fori Посмотреть профиль Найти все сообщения от fori
 
Регистрация: 27.01.2021
Сообщений: 112

А могу ли я создать чтото типа события с параметрамми?
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2021, 00:15
Аватар для Aetae
Любитель
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,764

Ну например: https://www.npmjs.com/package/vue-bus
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2021, 13:28
Кандидат Javascript-наук
Отправить личное сообщение для fori Посмотреть профиль Найти все сообщения от fori
 
Регистрация: 27.01.2021
Сообщений: 112

Спасибо вам за подсказки, долго експерментируя я придумал такой костыль
в 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 создавался быстрее них
Ответить с цитированием
  #8 (permalink)  
Старый 14.05.2021, 19:48
Аватар для Aetae
Любитель
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,764

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

Вы можете создать 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 поместить?
__________________
29375, 35

Последний раз редактировалось Aetae, 14.05.2021 в 20:09.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 19:24
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 08.02.2010 23:00
fckeditor как управлять olgatcpip Общие вопросы Javascript 1 27.01.2010 12:28
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 22:20
Как управлять layers? vlady999 Общие вопросы Javascript 0 15.09.2008 20:24