Логика входа на главную страницу требует определить, получен ли токен входа на странице, и перейти на страницу входа, если он не получен. После успешного входа перейдите на предыдущую страницу.
1.vue router
Решение о маршрутизации Первое, о чем мы думаем, это router.beforeEach pre-navigation guard. Этот метод принимает три параметра from next . Параметр to — это путь маршрутизации, через который следует перейти, from — это маршрут, с которого собирается покинуть текущая навигация, а метод next используется для устранения ловушки. Ниже приведен пример судебного решения, написанного на работе:
router.beforeEach(async (to, from, next) => {
const { name, meta } = to;
const { requireLogin } = meta;
if (name === 'login') { // 如果是登录页则用next方法resolve掉这个钩子,如果不是,进行到下一个判断
return next();
}
const needLogin = requireLogin && !store.getters.user.isLogin; // 从store中读取是否获取了已登录的信息
if (needLogin) {
return next({ // 如果没有则跳转到登录页,将当前路由路径放到参数中
name: 'login',
params: { back: to },
});
}
return next();
});
2. this.$router 与 this.$route
this.$router.push 与 this.$router.replace
После того, как страница входа завершит запрос на вход, выполните следующие действия. Получить параметры предыдущего пути в пути, а затем перейти на страницу
loginSuccess() {
const { params: { back } } = this.$route;
const route = back || { name: 'home' };
const { name, params, query } = route;
this.$router.replace({ name, params, query });
},
Есть две концепции, которые мы часто путаем в приведенном выше коде:
мы знаемthis.$router
Экземпляр маршрутизатора, который можно использовать для прямого доступа к маршрутам. Мы называем каждый объект в конфигурации маршрутизатора записью маршрутизации,this.$route
предоставляется для доступа к каждой записи маршрута. Таким образом, мы получаем параметры, используяthis.$route
Маршрут используется при переходе по маршрутуthis.$router
.
В коде верхнего уровня мы используем замену вместо нажатия для перехода по маршруту Разница между ними заключается в том, будет ли генерироваться запись в истории. replace не добавляет новую запись, а напрямую заменяет запись маршрутизации.