Как определить, был ли навигационный хук Vue-Router вызван нажатием кнопки? - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно выполнить определенное действие при каждом вызове router.push.

Я пытаюсь использовать для этого навигационные средства Vue-Router, но внутри я не могу сказать,его обратный вызов, какой метод (go / push / back / replace) вызвал его.

router.beforeResolve((to, from) => {
      // Do something only if this was triggered by "push"
});

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Навигационные охранники не могут поймать его напрямую: enter image description here

Но ,

используя состояние вашего приложения, вы можетеиметь лучшее представление, какая операция сделана.Вы можете сделать это, сохранив текущий и последний маршрут в вашем штате, используя охрану afterEach.После того, как вы их знаете, вы можете сравнить их с параметрами from и to, например, в beforeEach, чтобы узнать, толчок ли это или назад.Вероятно, вы можете добавить больше метаданных в свои маршруты, чтобы узнать больше о своих маршрутах, чтобы решить, будет ли он заменен каким-либо другим типом маршрута:

enter image description here

0 голосов
/ 24 сентября 2019

https://router.vuejs.org/guide/essentials/navigation.html

Насколько я понимаю, только метод push увеличит значение history.length на единицу.

Возможно, используйте глобальную переменную для проверки window.history.length.Если оно увеличится, вы можете запустить событие push.

Например:

router.beforeResolve((to, from) => {
  if (window.history.length > window.last_history_length) {
    trigger_your_push_event();
  }
  window.last_history_length = window.history.length;
}
});
...