vue中的路由3-----路由组件的两个新生命周期与路由守卫

本文介绍Vue.js中的路由管理技巧,包括使用<keep-alive>保持组件状态、新增生命周期钩子activated和deactivated,以及如何通过前置和后置路由守卫实现页面权限控制。

首先我们认识一下vue路由的生命情况

1.两个新生命周期
对于vue来讲,每一次加载进的页面都是进入到一个栈里面,加入一个新的页面就往栈里添加一条数据,点击返回就退到上一条数据,上一个vue页面就是被销毁了。

现在有一个需求,就是a页面填写完数据,切到b页面,然后返回来a页面的时候数据还在,应该怎么实现呢

由于当你跳到下一个页面的时候,上一个页面就会被销毁了,所以我们需要一个代码保持组件的生存
我们引入一个全新的vue标签 <keep-alive>,意思是保持你的组件代码切换的时候不被销毁。

<keep-alive > 
  <router-view></router-view>
</keep-alive>

当然你可以指定一个或者多个不被销毁,include里面的是vue的名称,也就是这个
在这里插入图片描述

<keep-alive include="About"> //保持一个组件生存
<keep-alive :include="['About','Home']">//保持多个组件生存
   	<router-view></router-view>
 </keep-alive>

如图,在切换到Home组件再切回来的时候input输入框的内容还在,说明这个组件没有被销毁
在这里插入图片描述

当你使用了keep-alive以后,由于当切换组件以后,上一个组件就不会被销毁,那么如何区分是否点击切换了页面呢,vue这时就多了两个全新的状态,激活与非激活状态

激活状态就是vue页面显示的时候的状态,非激活状态就是vue页面没有被显示,但是没有被销毁的状态

 // 新的生命周期钩子
  //激活组件钩子
  activated(){
    console.log("激活组件钩子")
  },
  //失活生命周期钩子
  deactivated(){
    console.log("失活组件钩子")
  },

2.路由守卫

我们经常需要一些情况,就是某些页面只允许某一些用户观看,那么我们应该怎么做呢,路由守卫就是帮助我们像过滤器一样过滤掉一些不允许访问的客户,使得他们没办法访问到具体的页面

(1)前置路由守卫
前置路由守卫就是当页面切换前进行判断,如果符合某一些要求,就允许他访问。
现在我们实现一个功能,要求只有名称叫aaa的用户才能访问到/home/news页面
在这里插入图片描述
代码如下,再路由文件route.js里面添加如下代码

//前置路由守卫
router.beforeEach((to,from,next)=>{
    //3个参数,to去哪,from从哪来,next下一步干嘛

    //只有aaa才能去/home/news,判断是否去/home/news,不是的话通行
    if(to.path==='/home/news'){
    	//判断去的人是不是aaa,不是的话不给过
        if(localStorage.getItem('name')==="aaa"){
            next()//通行
        }else{
            console.log("不可以去");
        }
    }else{
        next()
    }    
})

这种方法只能给一两个页面设置验证,若是想给大量的页面做身份验证的话,我们可以这样设置
第一步,给需要身份验证的文件添加判断语句

{
     path:'/about', 
      component:About,
      meta:{isAuth:true}//给路由器的文件路径加上判断语句
},

第二步,对添加了判断身份的路径进行判断
代码编写如下

router.beforeEach((to,from,next)=>{
    //3个参数,to去哪,from从哪来,next下一步干嘛
    
	//只有aa才能去授权的页面(授权的页面添加meta:{isAuth:true})
    if(to.meta.isAuth){//判断是否为真
        if(localStorage.getItem('name')==="aaa"){
            next()
        }else{
            console.log("不可以去");
        }
    }else{
        next()
    }   
})

这样子就可以快速的给大量的路径添加身份判断了。

(2)后置守卫
有前置守卫自然有后置守卫,后置守卫是当页面跳转完成以后对页面进行判断。

//后置路由守卫  当页面切换后进行判断
router.afterEach((to,from)=>{
    //to去哪,from从哪来,没有next,因为已经跳转了
    console.log("切换完毕");
})

在这里插入图片描述

(2)独享守卫
上面的方法都是对整个路由器进行判断的,若是只想给一两个路由上守卫,也可以直接把守卫写在路由器中

{
	name:"zujian",
	path:'/zujian', 
	component:zujian,
	beforeEnter:(to,from,next)=>{//直接把守卫写在在这里了
	    console.log("独享路由守卫")
	    next()
} 

(2)组件内路由守卫
路由守卫不单单只写在路由文件中,也可以写在vue文件中

//组件内路由守卫
  beforeRouteEnter(to,from,next){
    console.log('组件内路由守卫--进入')
    next()
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值