vue系列_vue-Router_组件内部的路由守卫(局部路由守卫)01

我不是女神ヾ 2021-11-16 12:06 416阅读 0赞

如果你对vue的路由基础了解,就朝下看,不然不了解,请看vue系列_vue-Router入门和理解 。

一、概念:

路由守卫:就是进入当前路由前,有个人“门卫”进行保护,也可以理解为“安检”。

在Vue组件里有个函数叫作:beforeRouteEnter。就是完成路由守卫的,表示进入当前路由前要做什么?

1、如下示例代码(先理解beforeRouteEnter函数):

  1. let goodslist={
  2. data:function(){
  3. return {}
  4. },
  5. template:"<h1>商品列表</h1>",
  6. beforeRouteEnter:function(to, from, next) {//进入组件前执行。
  7. console.log(to);
  8. console.log(from);
  9. next('/addGoods');//如果加了这句话,就永远进入不了当前组件,因为,无条件跳转到/addGoods
  10. },
  11. created:function(){
  12. console.log(this.$router);//在任何组件里都能看的router对象。因为,把router对象放在vue对象里
  13. console.log(this.$router.options);//这是路由配置
  14. console.log(this.$route);//当前路由,就是路径
  15. }
  16. }

解释一、:

  1. 示例代码中,
  2. beforeRouteEnter:function(to, from, next) \{//进入组件前执行。
  3. console.log(to);
  4. console.log(from);
  5. next('/addGoods');//如果加了这句话,就永远进入不了当前组件,因为,无条件跳转到/addGoods
  6. \},
  7. 完成的是路由守卫的工作,其实上面的代码,没有写路由守卫的逻辑,只是,解释了beforeRouteEnter函数的执行时机和参数的作用:
  8. 1beforeRouteEnter 函数的执行时机,当点击路由连接时,进入组件时,组件还没有显示时执行
  9. 2to:表示当前路由,即要进入的路由
  10. 3from:表示从哪来的,

4、next() 表示下一步要干啥,next(‘/addGoods’)就表示下一步,调到路由 /addGoods

所以,以上代码的执行结果时,如果你要想跳转到当前组件,“没门”,永远进入的都是 /addGoods路由对应的组件。

解释二、:

把函数beforeRouteEnter的代码改成如下(就可以完成简单的守卫了):

beforeRouteEnter:function(to, from, next) {//进入组件前执行。
if(!localStorage.getItem(“username”)){//如果没有登录,就先进入login组件进行登录
next(‘/login’);
}
}

二、完整的示例代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style type="text/css">
  7. </style>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <router-link to='/addGoods'>添加商品</router-link>
  12. <router-link to='/goodslist'>商品列表</router-link>
  13. <hr/>
  14. <router-view/>
  15. </div>
  16. </body>
  17. </html>
  18. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  19. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  20. <script type="text/javascript">
  21. // 登录组件
  22. let login={
  23. template:"<h1>亲,先登录噢</h1>"
  24. }
  25. // import addGoods from './addGoods';//引入组件:addGoods
  26. // 定义组件(不引入了,直接定义)
  27. let addGoods={
  28. data:function(){
  29. return {}
  30. },
  31. template:"<h1>添加商品</h1>"
  32. }
  33. // import goodslist from './goodslist';//引入组件:goodslist
  34. //定义组件(不引入了,直接定义)
  35. let goodslist={
  36. data:function(){
  37. return {}
  38. },
  39. template:"<h1>商品列表</h1>"
  40. ,
  41. beforeRouteEnter:function(to, from, next) {//进入组件前执行。
  42. if(!localStorage.getItem("username")){//如果没有登录,就先进入login组件进行登录
  43. next('/login');
  44. }
  45. }
  46. }
  47. //路由配置:是个json数组,不同的路径对应不同的组件
  48. const routeObjs = [
  49. {
  50. path: '/addGoods', //请求的路径:根目录下的addGoods
  51. component: addGoods //组件名
  52. },
  53. {
  54. path: '/goodslist', //请求的路径:根目录下的goodslist
  55. component: goodslist //组件名
  56. },
  57. {
  58. path:'/login',
  59. component:login
  60. }
  61. ]
  62. const router = new VueRouter({
  63. routes:routeObjs //routeObjs就是上面的路由配置
  64. })
  65. let vum = new Vue({
  66. el:"#app",
  67. router:router,//把路由对象传入到Vue对象里
  68. components:{
  69. login,addGoods,goodslist
  70. }
  71. })
  72. </script>

发表评论

表情:
评论列表 (有 0 条评论,416人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue --- 导航守卫

    个人理解:路由跳转是一个大的过程,就跟组件的创建一样,不是涉及组件的创建 -- 销毁,那么路由的跳转也同样涉及到这个过程。(对接springmvc里面的拦截器,spring的a

    相关 Vue-router 守卫

    在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录。如果用户已经登录,则顺利进入路由, 否则就进入登录页面。在路由管理页面

    相关 vue 守卫

    在main.js中,通过引入路由文件后,通过该对象使用 相当于路由的生命周期 1、全局前置守卫 (1)router.beforeEa