Vue2.0路由篇之路由跳转的一个小问题

本文记录了在Vue2.0项目中使用vue-router进行登录跳转时遇到的问题,即登录成功后页面未实际跳转,但URL已改变。作者通过排查和学习,发现将/login误认为是/的子目录是问题所在。解决方案是正确配置路由,并通过watch监听vuex中的变化,最终实现了登录后的正确跳转。
摘要由CSDN通过智能技术生成

Vue2.0路由篇之路由跳转的一个小问题

本文涉及到的知识点有Vue(v2.5.3)、vue-router(v3.0.1)、vuex(v3.0.1)
vue的基础知识请参考vue官方网站
关于路由的基础知识请参考vue-router官方网站
有关Vuex的基础知识请参考vuex官方网站

在看完一些vue教程、vue官方文档后,手痒痒想写点东西,于是就从最简单的登陆页面开始。结果遇到一个问题,困扰3天。今天终于按照最初设想搞定了,特意把其中的坑分享出来^^。

需求分析

  1. 使用localhost:3000与localhost:3000/login打开网页的时候,都会显示登陆页面

  2. 账号有两种:管理员、普通用户。使用管理员登陆时,url为 localhost:3000/admin;使用普通账号登陆时,url为 localhost:3000/user

实现过程

  1. 这步很简单,在router中配置redirect参数即可。
export default [
    {
        path: "/",
        component: Login,
        children: [
            {
                path: "login",
                component: Login
            }
        ]
    }
]

实现效果如下图:
首页

  1. 新增两个组件:Admin、User。
    再在代码里配置两个账号,管理员:admin,密码:admin;普通用户:user,密码:1234。
    最后添加路由:
export default [
    {
        path: "/",
        component: Login,
        children: [
            {
                path: 
好的,以下是基于 Vue 2.0 实现登录验证和路由拦截的步骤: 1. 安装 Vue 路由插件:`npm install vue-router -S` 2. 在 `main.js` 中引入 Vue 路由插件并配置: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const router = new VueRouter({ routes: [ { path: '/', name: 'home', component: Home }, { path: '/login', name: 'login', component: Login }, { path: '/dashboard', name: 'dashboard', component: Dashboard, meta: { requiresAuth: true } // 添加 meta 字段,表示需要登录验证 } ] }) // 路由拦截器 router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requiresAuth)) { // 判断该路由是否需要登录验证 if (!localStorage.getItem('token')) { // 判断用户是否已登录 next({ path: '/login', query: { redirect: to.fullPath } // 记录用户进入的路由,以便登录后重定向 }) } else { next() } } else { next() } }) new Vue({ router, render: h => h(App), }).$mount('#app') ``` 3. 在登录组件中,当用户输入用户名和密码并点击登录按钮时,向后端发送请求,获取登录凭证(例如 token),并将凭证存储在本地: ```javascript axios.post('/api/login', { username, password }) .then(response => { localStorage.setItem('token', response.data.token) // 登录成功后重定向到用户进入的路由 this.$router.push(this.$route.query.redirect || '/') }) .catch(error => { console.log(error) }) ``` 4. 在退出登录时,删除凭证: ```javascript localStorage.removeItem('token') this.$router.push('/login') ``` 这样,当用户访问需要登录验证的路由时,路由拦截器会检查用户是否已登录,如果未登录跳转登录面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值