前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >(十六)全局导航守卫

(十六)全局导航守卫

作者头像
老怪兽
发布2023-02-22 18:39:59
发布2023-02-22 18:39:59
29400
代码可运行
举报
运行总次数:0
代码可运行
全局导航守卫
  1. 全局路由导航
代码语言:javascript
代码运行次数:0
复制
// 导航刚触发、组件还没有加载,且导航发生实际跳转之前
router.beforeEach((to, form) => {
  console.log('全局路由守卫')
})

// 导航守卫执行完毕,且组件加载完成,组件中的导航守卫执行完毕之后,且导航实际跳转前执行
router.beforeResolve((to) => {
  if(to.path.startsWith('blogs')) {
    console.log('用户已经登录')
  }
})

// 导航确认并实际跳转之后执 - 可以操作 DOM 可以进行埋点统计数据,可以创建多个他们会按照顺序执行
router.afterEach((to) => {
  document.title = to.path
})
一、使用全局路由
代码语言:javascript
代码运行次数:0
复制
...

import { createRouter, createWebHistory } from "vue-router";

const routes = [
  ...
];

const router = createRouter({
  history: createWebHistory(),
  routes,
});

const loggedIn = true;

router.beforeEach((to, from) => {
  // console.log(from);
  // console.log(to);

  // 这个写法只限制 /blogs 如果访问其他 /blogs/news 还是能正常跳转
  if (to.path === "/blogs") {}

  // 如果要验证所有以 /blogs 开始的路由就使用下面这个方法 to.path.startWith
  if (to.path.startsWith("/blogs")) {
    // return false;
    if (!loggedIn) {
      return "/login";

      // 可以返回字符串 url 也可以返回 对象
      // return { path: "/login" };
      // return { name: "login" };
    }
  }
});

// 路由跳转之后,组件加载完毕,实际跳转之前
router.beforeResolve((to) => {
  if (to.path.startsWith("/blogs")) {
    console.log("用户已登录...");
  }
});

// 跳转成,可以操作 DOM
router.afterEach((to) => {
  document.title = to.path;
});

export default router;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全局导航守卫
  • 一、使用全局路由
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档