第十五节:VueRouter4.x用法之router-link/router-view的v-slot、动态增删路由、路由导航守卫

一. router-link的v-slot

(需要复习一下插槽的相关用法:https://www.cnblogs.com/yaopengfei/p/15338752.html) 

 

 

 

二. router-view的v-slot

 了解即可

 

 

三. 动态增删路由

1. 添加路由

(1). 添加1级路由

 使用addRoute方法,直接添加即可

import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
const router = createRouter({
    history: createWebHistory(),
    routes
})

// 动态添加1级路由
const Test1Router = {
    path: '/test1',
    name: 'test1',
    component: () => import('../views/Test1.vue'),
}
router.addRoute(Test1Router);

(2). 添加2级路由

 使用addRoute方法,第一个参数传入父级路由的名称

import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
// 动态添加2级路由
const Test2Router = {
    path: 'test2', //特别注意这里的test2之前不写/, 自动就给加上了
    component: () => import('../views/Test2.vue'),
}
// 第一个参数要写对应父级路由的名字,即name属性
router.addRoute('Home', Test2Router);

2. 删除路由 

方式一:添加一个name相同的路由进行覆盖;

方式二:通过removeRoute方法,传入路由的名称,即name属性;

方式三:通过addRoute方法的返回值回调实现删除;

PS: 补充其它方法

 

 

四. 路由导航守卫

 (详细的导航守卫见官网:https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html#导航守卫, 本节重点介绍全局前置守卫 beforeEash)

1. 前置守卫

 使用 router.beforeEach 注册一个全局前置守卫,可以理解 跳转到每个路由之前,都有经过这个守卫

(1). 两个参数:

 to:即将进入的路由Route对象;

 from:即将离开的路由Route对象;

(2). 返回值:

 A. false:取消当前导航,直接截断,不跳转

 B. 不返回或者undefined:进行默认导航;(相当于以前的 next()    里面什么参数不写)

 C. 返回一个路由地址:

  a. 可以是一个string类型的路径;

  b. 可以是一个对象,对象中包含path、query、params等信息; router.push({path: "/login", query: ....})

注:可选的第三个参数:next,在Vue2中我们是通过next函数来决定如何进行跳转的;但是在Vue3中我们是通过返回值来控制的,不再推荐使用next函数,这是因为开发中很容易调用多次next;

2. 案例 

  我们要做一套业务,必须登录后才能看见其它页面,简单模拟一下即可。

// 登录守卫
// (说明:只有经过登录页面以后,才允许访问其它页面,否则统一退回到登陆页)
/**
 * 参数:
 *       to: Route对象, 即将跳转到的Route对象
 *       from: Route对象, 
 * 返回值问题:
 *    1.false: 不进行导航
 *    2.undefined或者不写返回值: 进行默认导航
 *    3.字符串: 路径, 跳转到对应的路径中
 *    4.对象: 类似于 router.push({path: "/login", query: ....})
 */
router.beforeEach((to, from) => {
    // console.log(to, from);
    if (to.path !== '/login') {
        var myToken = window.localStorage.getItem('myToken');
        if (!myToken) {
            return '/login';
        }
    }
});

 

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2021-10-20 09:59  Yaopengfei  阅读(4553)  评论(2编辑  收藏  举报