• vue----webpack模板----局部路由守卫


     路由守卫分类:
    1.局部路由守卫
    
    2.全局路由守卫

    局部路由守卫

    只适合在当前路由使用,是局部的路由守卫
     
    当前路由进入,更新,离开时要做的事情
     
    路由进入:
    一个页面进入另一个页面, 是否登陆,
    查看个人信息   是否登录
    用途:
      1.验证用户是否登录
      2.支付前,判断余额是否足够
      3.热力图
      4.更新信息
    登录
    ----->进入,未登录------>登录页面 路由更新: 当路由发生改变的时候,,,当组件被复用的时候 路由离开: 未完成答题,离开页面,尽行确认,是------->离开,否--------->不离开
      用途:
      1.当用户没有支付时,提醒用户是否确定离开
      2.答题系统,提交时
      3.退出系统时
      4.信息未保存时
     
    路由进入:(在需要进入的组件中调用)
    beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
     next((vm)=>{
    //vm就是vue的实例,相当于this
    })
    },
     
    更新:(在复用的组件调用)
    beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,该组件被复用时调用
    // 可以访问组件实例 `this`
    },
    离开:(在离开的组件调用)
    beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
    }

    案例1:beforeRouteUpdate

    /*
        从a到b,,to为:b的路由信息
                from:a的路由信息
                next   b的路由信息
     
        问题:有一个是无法点击的
        */
        beforeRouteUpdate(to,from,next){
            // console.log(to);
            // console.log(next);
            this.name = to.params.name;
            this.price = to.params.price;
            //next根据to的path/name进行路由的跳转,如果不写next,当前路由不会执行
            //当前在a路由,再次点击a路由,不会发生跳转,因为没有让自己跳转,必须要用next
            next();
        },

    案例2:beforeRouteLeave

    /*
        从a到b    进行判断,符合条件进行跳转,不符合条件,不能跳转
        */
        beforeRouteLeave(to,from,next){
            // console.log(to);
            // console.log(this);
            var flag = confirm("请确认个人信息");//返回布尔值,确定为true,取消为false
            if(flag){
                next()//根据to的path/name进行跳转
            }else{
                this.$router.push("/find");
            }
     
        },

    案例3:beforeRouteEnter

     //eg:商品列表页必须要登录才能进入,如果未登录,就跳转到登录页
    beforeRouteEnter(to,from,next){ //访问不到this // console.log(this); // console.log(to); var status = false; next((vm)=>{ console.log(vm);//小型的vue实例 var flag = false; if(flag){ next();//执行to的path/name }else{ vm.$router.push("/login") } }) } }
  • 相关阅读:
    rabbitMQ学习笔记(二) 简单的发送与接收消息 HelloWorld
    rabbitMQ学习笔记(一)Windows 与Linux下rabbitMQ的安装
    数据库必知必会操作手册—创建高级联结
    面试题 16.11. 跳水板(数学法)
    面试题 08.06. 汉诺塔问题(分治递归)
    剑指 Offer 32
    剑指 Offer 32
    剑指 Offer 53
    剑指 Offer 30. 包含min函数的栈(辅助栈)
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/SRH151219/p/10428027.html
Copyright © 2020-2023  润新知