每个守卫方法接收三个参数:
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>
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。