路由中meta权限控制的使用

  1. meta作为一个对象属性{},被定义在routes的{}下,用于进行权限控制。如普通浏览者和已登陆用户可访问的数据信息不同;
  2. 场景: 页面包含首页、博客、登陆三个router-link,若是浏览者点击博客后则对应登陆组件,若是已登陆页面点击博客后则对应到博客组件。
<!DOCTYPE html>
<html>
	<head>
		<meta charset='utf-8'>
		<title>路由中meta权限控制 this.$router.push({})  router.beforeEach((to,from,next) => {})</title>
	</head>
	<body>
		<div id='app'>
			<router-link :to='{name:"home"}'>首页</router-link>
			<router-link :to='{name:"blog"}'>博客</router-link>
			<router-link :to='{name:"login"}'>登陆</router-link>
			<a href='javascript:void(0)'>退出</a>
			<router-view></router-view>
		</div>
		<script type='text/javascript' src='node_modules/vue/dist/vue.js'></script>
		<script type='text/javascript' src='node_modules/vue-router/dist/vue-router.js'></script>
		<script type='text/javascript'>
			let Home  = {
				template:`
					<div>
						我是Home
					</div>
				`
			}

			let Blog  = {
				template:`
					<div>
						我是Blog
					</div>
				`
			}

			let Login  = {
				data:function() {
					return {
						name:'',
						pwd:''
					}
				},
				template:`
					<div>
						<input type='text' v-model='name'/>
						<input type='password' v-model='pwd'/>
						<input type='button' value='登陆' @click='loginHandler'/>
					</div>
				`,
				methods:{
					// 登陆,点击登陆后跳转到博客页面
					loginHandler:function() {
						// 将用户名和密码保存
						localStorage.setItem('user',{name:this.name,pwd:this.pwd})
						// 跳转到博客页面(编程式导航),而router-link是申明式导航
						this.$router.push({
							name:'blog'
						})
					}
				}
			}


			let router = new VueRouter({
				routes:[
				// 重定向的使用
					{
						path:'/',
						redirect:'/home'
					},
					{
						name:'home',
						path:'/home',
						component:Home
					},
					{
						name:'blog',
						path:'/blog',
						component:Blog,
						// 给未来的路由做权限控制,对应key-value,其中key自起名字,在其它地方通过判断具体路由.meta.auth的值是true还是false,是true意味着用户访问该组件的时候需要登录,否则表明用户已登陆
						meta:{
							auth:true
						}
					},
					{
						name:'login',
						path:'/login',
						component:Login
					}
				]
			})


			/*
			第一次被执行在重定向的时候,此时from对应path为/的路由  而to对应path为/home的路由
	
			*/
			router.beforeEach((to, from, next) => {
				console.log(to)
				console.log(from)

				// 点击了博客链接,而且为true,那么需要跳转到登陆组件
				if(to.meta.auth) {
					// 判断此前是否有登陆,有登陆则继续到本应到的组件,没有登陆的话就进入login组件
					if(localStorage.getItem('user')) {
						next()
					}else {
						next({
							// 其中key-value可以添加多个,也可以设置name
							path:'/login'
						})
					}
				// 不是访问博客链接的话或者访问博客链接该值为false时,则直接进入下面的内容,如果不调用Next则页面会卡住
				}else {
					next()  
				}

			})

			let vm = new Vue({
				el:'#app',
				data:function() {
					return {

					}
				},
				router,
				template:``
			})
		</script>
	</body>
</html>

结果:
(1)无操作状态下页面
在这里插入图片描述
(2)点击“博客”后,因为路由发生了转化,在全局守卫router.beforeEach()的回调函数中进行判断,若需要判断登陆即auth:true且localStorage中无user对象,则定向到Login组件
在这里插入图片描述
(3)输入用户名和密码后,马上进入博客组件。同时查看localStorage中存储了user对象
在这里插入图片描述
在这里插入图片描述
(4)点击“首页”后再点击“博客”。因为用户已处于登陆状态,所以直接显示出Blog组件的内容
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue的路由配置,可以使用`meta`字段来添加自定义的元数据信息。`meta`字段可以用来存储一些和路由相关的额外信息,比如页面的标题、权限要求等。 下面是一个示例的路由配置,演示如何使用`meta`字段: ```javascript import Vue from 'vue'; import VueRouter from 'vue-router'; Vue.use(VueRouter); const routes = [ { path: '/', name: 'Home', component: Home, meta: { title: '首页', // 设置页面标题 requiresAuth: true // 设置需要登录权限 } }, { path: '/about', name: 'About', component: About, meta: { title: '关于我们' } } ]; const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }); // 在路由跳转前,可以通过导航守卫获取和处理meta字段的信息 router.beforeEach((to, from, next) => { document.title = to.meta.title || '默认标题'; // 设置页面标题 if (to.meta.requiresAuth && !isAuthenticated()) { next('/login'); // 如果需要登录权限且未登录,跳转至登录页 } else { next(); // 否则继续正常跳转 } }); export default router; ``` 在上述示例,每个路由对象都包含了一个`meta`字段,其的属性可以根据需要自定义。通过导航守卫的`beforeEach`钩子函数,我们可以在路由跳转前获取和处理`meta`字段的信息。比如,我们可以根据`meta`字段的`requiresAuth`属性来检查用户是否已经登录,如果未登录则跳转至登录页。 希望以上信息对你有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值