#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)
}
}
}
}
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)
}
}
}
}
Комментарии:
1. Я ценю это, но должен был упомянуть, что мы используем Vue2, похоже, это происходит в createWebHistory в маршрутизаторе. Использование окна.история.состояние. назад я просто становлюсь неопределенным.
2. @Travis С маршрутизатором Vue 2 и маршрутизатором Vue 3 используйте
beforeRouteEnter
для отслеживания предыдущего маршрута. См.Обновленный ответ.