Vue路由

一、路由的定义

Vue路由是指在使用Vue.js框架构建的单页面应用程序(SPA)中,管理和控制页面视图切换的一种机制。它是Vue.js生态系统中的一个重要组成部分,通过Vue Router这个官方的路由管理器来实现。Vue路由允许开发者定义多个路由规则,每个路由规则都对应一个组件,当用户访问特定的URL时,Vue Router会根据这些规则动态地将对应的组件渲染到视图中,从而实现无刷新的页面跳转和数据更新。

具体来说,Vue路由的定义可以如下:

Vue路由是Vue Router提供的一种用于单页面应用程序的路径到组件的映射系统。它允许开发者为不同的路径定义对应的组件,并在用户导航到这些路径时,自动加载和渲染相应的组件。Vue路由通过维护一个路由视图历史记录,支持前进、后退等导航操作,同时还提供了路由守卫等高级功能,以实现细粒度的路由控制和安全检查。

二、vue-router 使用

1,安装 Vue Router

cs 复制代码
npm install vue-router
# 或者
yarn add vue-router

2,创建路由实例导入 Vue

javascript 复制代码
//创建路由器对象,以及管理路由器配置
//引入一个函数
import {createRouter,createWebHistory,createWebHashHistory} from "vue-router";

3,定义路由

定义一些路由组件,然后创建路由配置数组,每个路由映射一个组件

javascript 复制代码
const routes = [
    {
        path:"/about",
        component :()=>import("@/views/About.vue"),
        name:"about",
    }
]

4,创建路由器实例并传递routes

javascript 复制代码
//创建路由器对象
const router= createRouter({
    history:createWebHistory(process.env.BASE_URL),
    routes:routes,
    linkActiveClass:'active',
})

5,创建和挂载根实例

javascript 复制代码
createApp(App).use(router).mount('#app')

6,在Vue组件中使用<router-view/><router-link/>

在你的应用组件(通常是App.vue)中使用<router-view/>作为路由组件的出口,使用<router-link/>作为导航链接。

html 复制代码
<router-link to="/about">about</router-link>

  <router-view></router-view>

三、基本路由配置

一个基本的路由配置包含pathcomponent属性,分别代表路由的路径和要渲染的组件。

javascript 复制代码
import Vue from 'vue'
import Router from 'vue-router'
import Home from './components/Home.vue'
import About from './components/About.vue'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home', // 可选,给路由命名
      component: Home
    },
    {
      path: '/about',
      name: 'about',
      component: About
    }
  ]
})

嵌套路由

嵌套路由用于在父组件内部渲染子组件。

javascript 复制代码
{
  path: '/parent',
  component: Parent,
  children: [
    {
      path: 'child',
      component: Child
    }
  ]
}

路由重定向

路由重定向可以通过redirect属性实现。

javascript 复制代码
{
  path: '/home',
  redirect: '/'
}

路由别名

别名可以给同一个组件定义多个路径。

javascript 复制代码
{
  path: '/about',
  component: About,
  alias: '/info'
}

四、路由守卫

在Vue.js中,路由守卫(Route Guards)是用来通过路由系统的钩子函数来控制导航流程的一种机制。它们可以在路由发生变化时执行一些代码,比如身份验证、权限检查、页面访问统计等。

全局守卫

全局守卫会影响所有路由的变化。

1,beforeEach: 在路由跳转前被调用,接收三个参数:to(即将进入的目标路由对象)、from(当前导航正要离开的路由对象)、next(一个函数,用于解析这个钩子)。

javascript 复制代码
const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // ...
  // 必须调用 next() 方法来解析钩子
  next()
})

2,beforeResolve: 在所有组件内守卫和异步路由组件被解析之后,导航被确认之前被调用。

javascript 复制代码
router.beforeResolve((to, from, next) => {
  // ...
  next()
})

3,afterEach: 在路由跳转后被调用,它没有 next 函数,也不会改变导航本身。

javascript 复制代码
router.afterEach((to, from) => {
  // ...
})

路由独享的守卫

可以在路由配置上直接定义beforeEnter守卫。

javascript 复制代码
const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
        next()
      }
    }
  ]
})

组件内的守卫

可以在组件内部定义以下守卫:

1,beforeRouteEnter: 在路由进入该组件的对应路由之前被调用,不能访问组件实例this,因为守卫执行前组件实例还没被创建。

javascript 复制代码
beforeRouteEnter (to, from, next) {
  // 不能访问 `this`
  next(vm => {
    // 通过 `vm` 访问组件实例
  })
}

2,beforeRouteUpdate: 在当前路由改变,但是该组件被复用时调用。

javascript 复制代码
beforeRouteUpdate (to, from, next) {
  // 可以访问组件实例 `this`
  next()
}

3,beforeRouteLeave: 在导航离开该组件的对应路由时被调用。

javascript 复制代码
beforeRouteLeave (to, from, next) {
  // 可以访问组件实例 `this`
  const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
  if (answer) {
    next()
  } else {
    next(false)
  }
}

在使用路由守卫时,请确保调用next()方法,否则路由导航会被阻塞。如果调用next(false),则取消当前的导航;如果调用next('/')或者next({ path: '/' }),则导航到不同的位置。在beforeRouteEnter守卫中,next可以接收一个回调函数,这个回调函数会在路由解析完成并且组件实例被创建之后执行。

相关推荐
yery37 分钟前
Ubuntu24.04中安装Electron
前端·javascript·electron
小夏同学呀42 分钟前
使用elementplus中的分页器,后端一次性返100条数据,前端自己做分页处理,vue3写法
前端·javascript·vue.js
程楠楠&M44 分钟前
uni-app功能 1. 实现点击置顶,滚动吸顶2.swiper一个轮播显示一个半内容且实现无缝滚动3.穿透修改uni-ui的样式
javascript·ui·uni-app
Mr.Lee082144 分钟前
electron-vite使用vue-i18n,ts 检查报错上不存在属性“$t”
前端·javascript·vue.js·typescript·electron
落丶寞44 分钟前
Electron应用程序打包后运行报错cannot find module ‘@vue/cli-service‘
javascript·vue.js·electron
你的Maya1 小时前
使用 Vite 打包工具库并使用 GitHub Actions 自动化发布npm流程
前端·npm·github
zzzzzzzziu2 小时前
vue3基础
前端·javascript·vue.js
D@.2 小时前
HTML与JavaScript结合实现简易计算器
服务器·javascript·计算机·html
Jasonakeke2 小时前
【JavaWeb】二、HTML 入门
前端·html
2301_796143792 小时前
Vue的指令v-model的原理
前端·javascript·vue.js