vue导航守卫如何运用

每个守卫方法接收三个参数:
to: 即将要进入的目标 路由对象
from:当前导航正要离开的路由
next:: 放行

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../node_modules/vue/dist/vue.js"></script>
		<script src="../node_modules/vue-router/dist/vue-router.js"></script>
	</head>
	<body>
		<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="clearOut">退出</a>
			<router-view></router-view>
		</div>
		
		<script>
			//声明组件
		 var Home={
			 template:`
			 <div>我是首页</div>
			 `
		 }
		 var Blog={
		 	template:`
		 	 <div>我是博客</div>
		 	`
		 }
		  var Login={
					data(){
						return{
							uname:'',
							psw:''
						}
					},
		 			 template:`
		 			 <div>
						 <input type="text" v-model="uname"/>admin
						 <input type="text" v-model="psw"/>密码
						 <input type="button" @click="handlerLogin"  value="登录">
					 </div>
		 			 `,
					 methods:{
						 handlerLogin(){
							 <!-- //保存用户名和密码 本地保存 -->
							 localStorage.setItem("username",{name:this.uname,psw:this.psw});
							<!-- //编程式导航 -->
							 this.$router.push({
								 path:'/blog' 
							 })
						 }
					 }
					 
		 }
		 var router=new VueRouter({
			 routes:[
				 {
					path:'/home',
					component:Home
				 },
				 {
				 	path:'/blog',
				 	component:Blog,
					<!-- 想在哪个组件做控制,跳转之前做配置 -->
					meta:{
						//用户访问该组件是否需要登录
						auth:true
					}
				 },
				 {
				 	path:'/login',
				 	component:Login
				 },
				
			 ]
		 })
		 router.beforeEach((to,from,next)=>{
			 console.log(to,from);
			if(to.meta.auth){
				<!-- //判断有没有用户名和密码 -->
				if(localStorage.getItem("username")){
					<!-- //有用户名说明已经登录 -->
					<!-- 放行 -->
					next()
				}else{
					<!-- //没有登录,渲染登录组件 -->
					next({
						path:"/login"
					})
				}
			}else{
				next()
			}
		 })
			//router挂载到实例上
			new Vue({
				el:"#app",
				router,
				methods:{
					clearOut(){
						localStorage.removeItem("username");
						this.$router.push({
							path:'/login'
						})
					}
				}
			
			})
		</script>
	</body>
</html>

posted @ 2019-04-18 15:34  lxystar  阅读(1105)  评论(2编辑  收藏  举报