Как узнать, была ли нажата кнопка «назад / вперед» вместо ручного нажатия маршрутизатора в vue / vue-router? - PullRequest
0 голосов
/ 13 февраля 2019

В vue / vue-router у меня есть наблюдатель на $route, который запускается двумя способами.

  1. Я нажимаю назад или вперед в браузере.
  2. пользователь взаимодействует с формой, есть наблюдатели для переменных, которые использует форма, и эти функции-наблюдатели затем обновляют URL, используя $router.push.

Итак, в функции наблюдателя для $route,Как узнать, какой из 2 вышеописанных сценариев произошел?

Проблема в том, что если возник сценарий 1, я хочу вручную обновить форму снова.Если произошел сценарий 2, форма уже была обновлена, поэтому я не хочу снова обновлять форму вручную.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Это похоже на хитрость

window.onpopstate = function(event) {
  console.log("location: " + document.location + ", state: " + JSON.stringify(event.state));
};

, он запускается, когда я делаю назад или вперед, а не когда я вручную обновляю URL.

0 голосов
/ 13 февраля 2019

Итак, в функции наблюдателя для $route, как узнать, какой из 2 вышеописанных сценариев произошел?

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

Если вы хотите знать, когда изменяется маршрут из-за того, что пользователь нажимает назад /Нажмите кнопку браузера вперед, вам нужно добавить прослушиватель событий для события popstate.

Проблема в том, что если произошел сценарий 1, я хочу вручную обновитьсформировать снова.Если произошел сценарий 2, форма уже была обновлена, поэтому я не хочу снова обновлять форму вручную.

Не вижу проблемы с обновлением формы на любое изменение данных в параметрах URL / запрос;Вы можете проверить, совпадают ли данные URL с данными формы, и пропустить обновление.

...