Vue是一个非常流行的JavaScript框架,Vue-Router是Vue官方提供的路由管理器,它可以帮助我们轻松实现页面跳转和鉴权的逻辑。
1.安装和配置Vue-Router
安装vue-router非常简单,只需要在终端中使用npm命令即可:
npm install vue-router
安装完毕后,在Vue的main.js中引入vue-router并实例化:
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const router = new VueRouter({
routes:[
//这里配置路由信息
]
})
new Vue({
router
}).$mount('#app')
1.1 Vue-Router的基本功能及原理
Vue-Router可以帮助我们实现以下功能:
- 配置路由信息,实现不同路由的页面跳转。
- 嵌套路由,实现页面与页面之间更加清晰的关系。
- 路由传参,实现参数的传递和获取。
- 路由钩子函数,实现鉴权和页面加载效果。
Vue-Router的原理是通过改变浏览器地址栏地址来实现页面跳转,然后根据配置文件去匹配路由信息,最终在视图中渲染对应页面的组件。
2.Vue-Router实现登录鉴权逻辑
在实际开发中,很多页面是需要登录之后才能访问的,这就需要我们在vue-router中实现登录鉴权逻辑了。
2.1 路由拦截
路由拦截可以帮助我们实现登录鉴权的逻辑,当用户没有登录时,禁止访问需要登录的页面。
我们可以在Vue-Router中使用beforeEach钩子函数来实现路由拦截逻辑。
beforeEach的作用是在路由切换之前拦截路由,然后根据需要进行处理。
下面是一个例子,当用户未登录时,无法访问home页面:
router.beforeEach((to, from, next) => {
if (to.path === '/home' && !localStorage.getItem('username')) {
next('/login')
} else {
next()
}
})
这段代码的意思是:当用户访问home页面且未登录时,跳转到登录页面;否则放行,继续执行下一个钩子函数。
2.2 登录状态管理
登录状态的管理可以采用Vuex来实现,在登录成功之后,将用户信息存储到Vuex中,在路由拦截中判断是否有用户信息即可。
下面是一个简单的登录逻辑示例,将用户信息存储到localStorage中:
login(){
// 省略登录校验逻辑
localStorage.setItem('username', 'test')
this.$store.commit('login')
this.$router.push('/home')
}
下面是针对auth路由的登录鉴权的完整代码示例:
router.beforeEach((to, from, next) => {
if (to.meta.auth && !localStorage.getItem('username')) {
next('/login')
} else {
next()
}
})
使用meta字段来区分哪些路由需要登录鉴权,修改路由配置信息中的meta字段即可:
const routes = [
{
path: '/home',
component: Home
},
{
path: '/login',
component: Login
},
{
path: '/auth',
component: Auth,
meta: {
auth: true
}
}
]
3.Vue-Router实现页面跳转逻辑
Vue-Router可以实现常见的页面跳转场景,例如:
- 页面之间的跳转。
- 跳转到外部链接。
- 带参跳转。
3.1 基本页面跳转
使用Vue-Router实现页面跳转非常简单,只需要在路由配置信息中定义好路由即可。
下面是一个简单的路由配置示例:
const routes = [
{
path: '/home',
component: Home
},
{
path: '/about',
component: About
}
]
这段代码的意思是,在访问/home和/about路径时,将渲染对应的组件。
我们可以在组件中使用<router-link>
标签来实现页面跳转:
<router-link to="/home">Home</router-link>
这段代码的意思是,在点击Home链接时,跳转到/home路径,并渲染Home组件。
3.2 外部链接跳转
在Vue-Router中跳转到外部链接也非常简单,只需要在to属性中填写完整的链接即可。
下面是一个例子:
<router-link to="//www.google.com">Google</router-link>
这段代码的意思是,在点击Google链接时,跳转到www.google.com。
也可以使用window.open来实现在新标签页中打开外部链接:
<a href="//www.google.com" target="_blank">Google</a>
这段代码的意思是,在点击Google链接时,在新的标签页中打开www.google.com。
3.3 带参跳转
在开发中,经常需要传递参数进行跳转,例如从列表页面进入详情页面时需要传递某项数据。
使用Vue-Router可以轻松实现带参跳转,主要有以下两种方式:
- 在路径中传递参数。
- 在query中传递参数。
在路径中传递参数可以在路由配置信息中使用动态路由,例如:
const routes = [
{
path: '/user/:id',
component: User
}
]
这段代码的意思是,访问/user/:id路径时,将渲染User组件,并且在URL中传递一个id参数。
我们可以在组件中使用$route.params来获取参数值:
mounted() {
console.log(this.$route.params.id)
}
在User组件中,可以使用$route.params.id获取到传递的参数。
在query中传递参数可以使用<router-link>
标签的to属性来传递参数,例如:
<router-link :to="{path:'/user',query:{id:1}}">用户详情</router-link>
这段代码的意思是,在点击“用户详情”链接时,将跳转到/user路径,并且在URL的query字符串中传递一个id参数。
我们可以在组件中使用$route.query对象来获取参数值:
mounted() {
console.log(this.$route.query.id)
}
在User组件中,可以使用$route.query.id获取到传递的参数。
总结
使用Vue-Router可以方便地实现页面跳转和鉴权逻辑,在开发中非常实用。
在本文中,我们介绍了如何安装和配置Vue-Router,以及如何使用Vue-Router实现登录鉴权和页面跳转逻辑。
如果你还没有使用Vue-Router,希望这篇文章可以帮助你入门,如果你已经使用过Vue-Router,希望这篇文章可以帮助你加深理解。
当然,这里仅仅是对vue-router使用的基础介绍,其中的实际应用场景并不局限在此,因此接下来的学习自己需要结合实际业务进行理解