vue路由拦截,路由嵌套,

  • Post author:
  • Post category:vue




系列文章目录


提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加


例如:第一章 Python 机器学习入门之pandas的使用



提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录




前言

实现页面拦截有原本的组件展示,比如必须登录才能跳转商品页面



例如:登录拦截页面

一、路由拦截

1.首先在你需要拦截的路由界面的配置字段中去添加一个额外的属性,例如自定义属性meta

  {

    path: '/cart',

    name: 'cart',

    component: () => import(/* webpackChunkName: "about" */ '../views/CartView.vue'),

    // meta属于路由元数据信息 给组件添加一些额外的属性  例如自定义属性

    meta:{

      isNeedLogin:true

    }

2.router下的index,js文件下,全局的路由配置里获取原数据信息

思路如下

2.1  获取路由的原数据信息 ,取出登录成功的凭证,

2.2   判断那些页面需要进行登录判断

router.beforeEach((to,from,next)=>{
  // 1获取路由的元数据信息
  console.log(to)
  let {isNeedLogin} = to.meta  
  // 取出登录成功之后保存的登录凭证
  let token = localStorage.getItem("s1")
  console.log(isNeedLogin)
  // 2判断哪些页面需要进行登录判断
  if(isNeedLogin){
    // 证明页面需要进行登录
    if(!token){
      // 证明没有登录 去登录页面 next("/路由地址") 跳转功能
      // to.fullPath 跳转的目标路由地址  /cart
      next(`/login?toPath=${to.fullPath}`)
    }else{
      // 证明登陆过了
      next()
    }
  }else{
    // 证明页面不需要登录
    next()  //继续跳转到对应的页面
  }
})

3.我们跳转别的页面可以,可不能在自己的页面跳转自己的页面,这时候就需要在导航路由设置

字段方法:退出登录之后跳回首页:代码如下

<script>

  export default{

    methods:{

      f1(){

        localStorage.removeItem("s1")

        // 不能在自己页面跳转到自己页面

        if(this.$route.path!="/")

        {

          this.$router.push("/")

        }

      }

    }

  }

</script>

4.现在是登录之后跳转的页面,我们保存的token就起作用了将传递过来的路由,根据路由进行跳转指定的页面

<script>
export default {
    methods:{
        f1(){
            // 实际开发时候需要正则 ajax请求 如果登录成功保存token
            setTimeout(()=>{
                //  保存token
                localStorage.setItem("s1","登陆成功")
                // 取出传递过来的路由 根据路由进行跳转指定的页面
                var path = this.$route.query.toPath 
                if(path){
                    this.$router.push(path)
                }else{
                    this.$router.push("/")
                }
            },2000)
        }
    }
}
</script>




二、

路由嵌套

1.路由嵌套其实就是在路由配置的对象中添加children简单来说就是在父路由里面添加一个字路由,注意name需要写成父路由,然后就可以进行导入子路由了代码如下

       //父路由
     {
        path:"shanghai",
        name:"shanghai",
        component:()=> import("../views/ShangHai.vue"),
         //  通过children添加 子路由 
        children:[
          {
            path:'news',
            name:"shanghainews",
            component:()=>import("../views/News.vue")
          }
        
        ]
        
      },

2.最后一步就简单了在父路由添加<router-view></router-view>就行了




总结

1 路由拦截: 当调到目标路由之前,可以再跳转其他的路由界面 beforeEach()函数通过获取路由的元数据信息,根据元数据信息判断哪些页面是否需要进行登录判断,再判断有没有登录过,使用next函数进行跳转

2 嵌套路由 children,注意的地方设置子路由默认路由时候,可以父级路由name属性注释掉



版权声明:本文为qq_72580318原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。