meta 是对于路由规则是否需要验证权限的配置。
在 meta 对象中加入一个标识符(auth),例如:
当 meta 对象中的 auth 属性值为true时,表明用户访问该组件时需要登录。
全局守卫:router.beforeEach((to, from, next){ }); 在进入路由之前调用。
to:Router:即将要进入的目标路由对象。
from:Router:当前导航正要离开的路由。
next:Function:一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
next()放行:进行管道中的下一个钩子。如果全部钩子执行完了,则导航状态就是 confirmed(确认的),如果不放行就会卡住。
编程式导航:在方法内动态的操作路由。this.$router.push('/login')。
案例代码如下:
<div id="app"> <!-- 声明式导航 --> <router-link to='/home'>首页</router-link> <router-link to='/blog'>我的博客</router-link> <router-link to='/login'>登陆</router-link> <a href="javascript:void(0);" @click='clear'>退出</a> <router-view></router-view> </div> <script type="text/javascript" src="../vue/vue.js"></script> <script type="text/javascript" src="./node_modules/vue-router/dist/vue-router.js"></script> <script type="text/javascript"> Vue.use(VueRouter); // 定义组件 var Home = { template:` <div>我是首页</div> ` } var Blog = { template:` <div>我是博客</div> ` } var Login = { template:` <div> <input type="text" v-model='name' /> <input type="text" v-model='pwd' /> <input type="button" value="登陆" @click='login' /> </div> `, data(){ return{ name:'', pwd:'' } }, methods:{ login(){ localStorage.setItem('user', {name:this.name, pwd:this.pwd}); // 编程式导航 this.$router.push({name:'blog'}); } } } var router = new VueRouter({ routes:[ { // 重定向 path:'/', redirect:'home' }, { path:'/home', component:Home }, { path:'/blog', name:'blog', component:Blog, // 给未来的路由做权限控制 全局路由守卫 来做参照条件 meta:{ // 表名用户访问该组件需要登录 auth:true } }, { path:'/login', component:Login } ] }); // 全局守卫 router.beforeEach((to, from, next) => { console.log(to); console.log(from); // 用户点击了博客链接 该用户未登录 需要登陆判断准备跳转登录页面 if(to.meta.auth){ if(localStorage.getItem('user')){ // 不为空 放行 next(); }else{ // 用户需要登陆,跳转到登陆界面。 next({ path:'/login' }); } }else{ // 直接放行 next(); // 如果不调用next就会卡住 } }); new Vue({ el:'#app', router, methods:{ clear(){ localStorage.removeItem('user'); this.$router.push('/login') } } }); </script>
标签:name,登录,校验,next,meta,path,router,权限,路由 From: https://www.cnblogs.com/sfwu/p/16903879.html