vue3 学习笔记02 -- 配置路由router+导航守卫

vue3 学习笔记02 – 配置路由router+导航守卫

路由的拦截及跳转

配置路由

  • 安装路由库
npm install vue-router@4
  • 定义路由
    • 创建index.ts文件(具体路径:src/router/index.ts)
// src/router/index.ts
 
import { createRouter, createWebHashHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'
 
export const routes: Array<RouteRecordRaw> = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/views/login/index.vue'),
  },
  {
    path: '/',
    name: 'Home',
    component: () => import('@/views/home/index.vue'),
  }
];
 
const router = createRouter({
  history: createWebHashHistory(),
  routes: routes as RouteRecordRaw[],
  scrollBehavior: () => ({ left: 0, top: 0 })
});
 
export default router;
  • 创建视图组件

    • src/views/login/index.vue
    <template>
      <button @click="goToHome">跳转到首页</button>
    </template>
    <script lang="ts" setup>
       import { useRouter } from 'vue-router'
       const router = useRouter()
       const goToHome = ()=>{
          router.push('/')
       }
    </script>
    
    • src/views/home/index.vue
    <template>
     <button @click="goToHome">跳转到登录页</button>
    </template>
    <script lang="ts" setup>
      import { useRouter } from 'vue-router'
      const router = useRouter()
      const goToHome = ()=>{
         router.push('/login')
      }
    </script>
    
  • 在main.js中引入挂载路由

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'
const app = createApp(App)

app.use(router)
app.mount('#app')

  • App.vue
<script setup lang="ts">
</script>
<template>
  <router-view></router-view>
</template>
 
<style>
 
</style>

导航守卫

如果已登录存在token,则直接跳转到指定页面,否则进入登录页

  • src/permission/index.ts
import router from '@/router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

const whiteList = ['/login']
NProgress.configure({ showSpinner: false }) // 进度条
router.beforeEach(async (to, form, next) => {
  NProgress.start()
  if (存在token) {
    if (to.path == '/login') {
      next()
      NProgress.done()
    } else {
        try{
            next()
            NProgress.done()
        } catch (error) {
          next(`/login`)
          NProgress.done()
        }
    }
  } else {
    if (whiteList.indexOf(to.path) !== -1) {
      next()
      NProgress.done()
    } else {
      next(`/login`)
      NProgress.done()
    }
  }
})

相关推荐

  1. vue3 学习笔记02 -- 配置router+导航守卫

    2024-07-11 06:02:03       32 阅读
  2. vue-router(守卫)

    2024-07-11 06:02:03       39 阅读
  3. Vue router(守卫)

    2024-07-11 06:02:03       30 阅读
  4. Vue守卫笔记

    2024-07-11 06:02:03       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 06:02:03       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 06:02:03       108 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 06:02:03       91 阅读
  4. Python语言-面向对象

    2024-07-11 06:02:03       98 阅读

热门阅读

  1. Win11安装WSL2在非系统盘(非C盘)+图形化界面

    2024-07-11 06:02:03       27 阅读
  2. c语言指针

    2024-07-11 06:02:03       23 阅读
  3. Mojo模板引擎:释放Web开发的无限潜能

    2024-07-11 06:02:03       22 阅读
  4. ffmpeg 文档 - 未完

    2024-07-11 06:02:03       25 阅读
  5. Codeforces Round #956 (Div. 2) and ByteRace 2024

    2024-07-11 06:02:03       26 阅读