vue3+vue-router4 路由守卫

router/index.ts:

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      redirect: '/home',
    },
    {
      path: '/home',
      component: () => import('../views/index/Home.vue'),
    },
    {
      path: '/me/:id',
      component: () => import('../views/me/Index.vue'),
      beforeEnter: (to, from) => {
        console.log('beforeEnter 路由独享的守卫')
        return true
      }
    },
  ],
})

router.beforeEach((to, from) => {
  console.log('beforeEach 全局前置守卫')
  if (from.path === '/home') {
    return true
  } else {
    return true
  }
})

router.beforeResolve(async (to) => {
  console.log('beforeResolve 全局解析守卫')
  return true
})

router.afterEach((to, from) => {
  console.log('afterEach 全局后置钩子')
})

export default router

me/Index.vue:

<script setup lang="ts">
import { onMounted, ref } from 'vue'
import { useRouter, onBeforeRouteUpdate, onBeforeRouteLeave } from 'vue-router'

const router = useRouter()

onBeforeRouteUpdate(async (to, from) => {
  console.log('onBeforeRouteUpdate 组件内')
})

onBeforeRouteLeave((to, from) => {
  console.log('onBeforeRouteLeave 组件内')
})

const handleJumpPath = (path: any) => {
  router.push(path)
}

onMounted(() => {})
</script>

<template>
  <div>me</div>
  <button @click="() => handleJumpPath('/me/2')">更新路由</button>
</template>

Home.vue:

<script setup>
import { onMounted } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { useSystem } from './config'
import { nanoid, customAlphabet } from 'nanoid'
import Header from './Header.tsx'
import { useMenuStore } from '../../stores/menu'

import './index.css'

const router = useRouter()
const route = useRoute()

const handleJumpPath = (path) => {
  router.push(path)
}

onMounted(() => {
  // const { service } = useSystem()
  // service.chat.handleLoginOut()
  let id1 = nanoid()
  console.log(id1)
  let customNanoid = customAlphabet('1234567890', 5)
  let id2 = customNanoid()
  console.log(id2)
  const { handleGetMenuData } = useMenuStore()
  let meunData = handleGetMenuData()
  console.log('meunData', meunData)
})
</script>

<template>
  <div>
    <Header></Header>
    <button @click="() => handleJumpPath('/me/1')">me</button>
    <el-button>1</el-button>
  </div>
</template>

参考链接

https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

人工智能学习网站

https://chat.xutongbao.top

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐同保

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值