Vue JS — Найти историю маршрутизатора -1

#vue.js #vuejs2 #vue-router

Вопрос:

Возможно ли с помощью Vue2 увидеть, где…

 this.$router.go(-1)
 

Возьмет тебя с собой?

У нас есть вариант использования для перенаправления пользователя на последнюю страницу, на которой он находился после входа в систему, если только это не страница «Забыли пароль». В этом случае мы хотели бы отправить их обратно на домашнюю страницу.

Каков наилучший способ сделать это?

Ответ №1:

Vue 2 с маршрутизатором Vue 3

Вы можете использовать beforeRouteEnter навигационную защиту для отслеживания предыдущего маршрута (сохраненного в from ):

 export default {
  beforeRouteEnter(to, from, next) {
    next(vm => {
      vm._backRoute = from.path
    })
  },
  methods: {
    goBack() {
      if (this._backRoute === '/reset-password') {
        this.$router.push({ name: 'Home' })
      } else {
        this.$router.go(-1)
      }
    }
  }
}
 

демонстрация 1

Vue 3 с маршрутизатором Vue 4

Вы могли бы прочитать window.history.state.back , чтобы заранее узнать, каким будет обратное состояние:

 export default {
  methods: {
    goBack() {
      if (window.history.state.back === '/reset-password') {
        this.$router.push({ name: 'Home' })
      } else {
        this.$router.go(-1)
      }
    }
  }
}
 

демонстрация 2

Комментарии:

1. Я ценю это, но должен был упомянуть, что мы используем Vue2, похоже, это происходит в createWebHistory в маршрутизаторе. Использование окна.история.состояние. назад я просто становлюсь неопределенным.

2. @Travis С маршрутизатором Vue 2 и маршрутизатором Vue 3 используйте beforeRouteEnter для отслеживания предыдущего маршрута. См.Обновленный ответ.