Vue中的路由 | 守卫问题

什么是路由

路由就是一个对应关系

SPA(但页面应用程序)与前端路由

Hash地址和组件之间的对应关系

前端路由的工作方式

  1. 用户点击路由链接
  2. 导致了url地址栏中hash的值发生变化
  3. 前端路由监听到了hash地址的变化
  4. 前端路由把对应组件渲染到浏览器当中

手动监听

//动态组件
<component :is='comName'></component>
//------------------------------------------
//监听hash改变事件
window.onhashchange=()=>{
	console.log('监听到了hash地址的变化',location.hash)
	switch (location.hash){
		case '#/home':
			this.comName-''
			break 
	}
}

vue-router

vue-router是vuejs官方给出的一套路由管理方案,它只能结合vue项目进行使用,能够轻松管理SPA项目中组件的切换

官方文档:https://router.vuejs.org/zh

安装

npm i vue-router -S

创建路由模块

在src源目录下,新建router/index.js路由模块,并初始化代码

import Vue from 'vue'
import VueRouter from 'vue-router'
//调用Vue.use()函数,把VueRouter安装为Vue的插件
import Home from '@/components/Home.vue'
import Movie from '@/components/Movie.vue'
import About from '@/components/About.vue'
Vue.use(VueRouter)
//创建路由和实例对象
const router = new VueRouter({
	//一个数组,定义hash地址与组件之间的对应关系
	routes:[
		{path:'/',redirect:'/home'}
		{path:'/home',component:Home},
		{path:'/movie',component:Movie},
		{path:'/about',component:About}
	]
})
//向外共享路由的实例对象
export default router
//main.js中添加
//import部分添加
import router from @/router/index.js
//new Vue实例中
router:router
//vue组件中
<router-link to="/home">首页</router-link>
<router-link to="/movie">电影</router-link>
<router-link to="/about">关于</router-link>
//只要在项目中配置了vue-router,就可以使用router-view这个组件了
<router-view><router-view> 

路由重定向

指的是用户在访问地址A的时候,强制用户跳转到地址C,从而展示特定的组件页面,通过路由规则的redirect属性,指定一个新的路由地址,可以很方便地设置路由的重定向。
{path:‘/’,redirect:‘/home’}

嵌套路由

route:[
	{
		path:'/about',
		component:About,
		redirect:'/about/tab1'
		children:[
			{path:'tab1',component:Tab1},
			{path:'tab2',component:Tab2}
		]
	}
]

动态路由

{page:'/movie/:id',component:Movie}
//上面语句将以下三个路由合并成一个
{page:'/movie/1',component:Movie}
{page:'/movie/2',component:Movie}
{page:'/movie/3',component:Movie}

vue-router中的编程式导航API

this.$router.push(‘hash地址’)
跳转到指定的hash地址,并增加一条历史记录
this.$router.replace(‘hash地址’)
跳转到指定的hash地址,并替换掉当前的历史记录
this.$router.go(数值n)
在历史中前进n层
$router.back()
在历史纪录中,后退到上一个页面
$router.forward()
在历史纪录中,前进到下一个页面

导航守卫

控制路由的访问权限
在这里插入图片描述

全局前置守卫

每次发生路由的导航跳转时,都会触发全局前置守卫。因此,在全局前置守卫中,程序员可以对每个路由进行访问权限的控制。

const router = new VueRouter({...})
router.beforeEach(function(to,from,next){
	//to是将要访问的路由的信息对象
	//from是将要离开的路由的信息对象
	//next是一个函数,调用next()表示放行,允许这次路由导航
})

next函数的3种调用方式

当前用户拥有后台主页的访问权限,直接放行next()
当前用户没有后台主页的访问权限,强制其跳转到登陆页面,next(‘/login’)
当前用户没有后台主页的访问权限,不允许跳转到后台主页,next(false)
在这里插入图片描述

分析

  1. 要拿到用户将要访问的hash地址
  2. 判断hash地址是否等于/main
  3. 如果等于/main,证明需要登录之后,才能访问成功
  4. 如果不等于/main,则不需要登录,直接放行,调用next()
  5. 如果访问的地址是/main。则需要读取localStorage中的token值
  6. 如果有token则放行,如果没有,则强制跳转到login等于页面
router.beforeEach(function(to,from,next){
	//to是将要访问的路由的信息对象
	//from是将要离开的路由的信息对象
	//next是一个函数,调用next()表示放行,允许这次路由导航
	if(to.path==='/main'){
		const token=localStorage.getItem('token')
		if(token){
			next()
		}	
		else{
			next('/login')	
		}
	}else{
		next()
	}
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值