vue3路由总结

一、安装与配置

  1. 安装 Vue Router

    npm install vue-router@4
    # 或
    yarn add vue-router@4
  2. 基本配置

    // router/index.js
    import { createRouter, createWebHistory } from 'vue-router'
    import Home from '../views/Home.vue'
    import About from '../views/About.vue'
    
    const routes = [
      { path: '/', component: Home },
      { path: '/about', component: About }
    ]
    
    const router = createRouter({
      history: createWebHistory(),
      routes
    })
    
    export default router

  3. 在 main.js 中挂载

    import { createApp } from 'vue'
    import App from './App.vue'
    import router from './router'
    
    const app = createApp(App)
    app.use(router)
    app.mount('#app')


二、路由基础组件

  1. <router-view>
    用于渲染匹配到的路由组件,通常放在布局文件中:

    <template>
      <div id="app">
        <router-view />
      </div>
    </template>
  2. <router-link>
    用于导航的组件,替代 <a> 标签:

    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>

三、路由匹配(无对应路由则跳转至该路由)

{ path: '/:pathMatch(.*)*', component: NotFound }

四、嵌套路由

通过 children 配置子路由:

const routes = [
  {
    path: '/user',
    component: UserLayout,
    children: [
      { path: '', component: Profile }, // /user
      { path: 'posts', component: Posts } // /user/posts
    ]
  }
]

五、命名路由与命名视图

  1. 命名路由
    通过 name 属性简化路由跳转:

    { path: '/settings', name: 'Settings', component: Settings }
    
    <router-link :to="{ name: 'Settings' }">Settings</router-link>


六、编程式导航

通过 router 实例方法控制导航:

import { useRouter } from 'vue-router'

const router = useRouter()

// 跳转到指定路径
router.push('/about')

// 带参数
router.push({ name: 'User', params: { id: 1 } })

// 替换当前历史记录
router.replace('/home')

// 前进/后退
router.go(1)  // 前进一步
router.go(-1) // 后退一步

七、路由重定向与别名

  1. 重定向

    { path: '/old-path', redirect: '/new-path' }
  2. 别名

    { path: '/home', component: Home, alias: '/welcome' }


八、导航守卫

  1. 全局前置守卫

    router.beforeEach((to, from, next) => {
      if (to.meta.requiresAuth && !isAuthenticated) {
        next('/login')
      } else {
        next()
      }
    })

  2. 路由独享守卫

    {
      path: '/admin',
      component: Admin,
      beforeEnter: (to, from, next) => {
        // 权限校验逻辑
      }
    }

  3. 组件内守卫

    <script setup>
    import { onBeforeRouteLeave } from 'vue-router'
    
    onBeforeRouteLeave((to, from, next) => {
      if (hasUnsavedChanges) {
        confirm('确定离开?') ? next() : next(false)
      } else {
        next()
      }
    })
    </script>


九、路由懒加载

优化首屏加载速度:

const routes = [
  {
    path: '/dashboard',
    component: () => import('../views/Dashboard.vue')
  }

十:Route与Router的区别

1. router(路由实例)

  • 是什么
    router 是全局路由器的实例(通过 createRouter 创建),负责管理整个应用的路由逻辑。

  • 核心职责

    • 控制导航(跳转、前进、后退)

    • 管理路由配置(routes 数组)

    • 注册全局路由守卫

  • 获取方式

    import { useRouter } from 'vue-router'
    const router = useRouter() // 组合式 API
    • 在选项式 API 中通过 this.$router 访问。

  • 常用方法

    router.push('/path')        // 跳转到新路由(添加历史记录)
    router.replace('/path')     // 替换当前路由(不添加历史记录)
    router.go(-1)              // 后退一步
    router.back()              // 等价于 go(-1)
    router.forward()           // 等价于 go(1)


2. route(当前路由对象)

  • 是什么
    route 是当前激活的路由信息对象,表示当前 URL 解析后的状态。

  • 核心职责

    • 提供当前路由的详细信息(路径、参数、查询等)

    • 反映当前 URL 的实时状态

  • 获取方式

    import { useRoute } from 'vue-router'
    const route = useRoute() // 组合式 API
    • 在选项式 API 中通过 this.$route 访问。

  • 关键属性

    route.path       // 当前路径(如 "/user/1")
    route.params     // 动态参数(如 { id: '1' })
    route.query      // URL 查询参数(如 ?name=John → { name: 'John' })
    route.hash       // URL 哈希(如 #section)
    route.meta       // 路由元信息(自定义数据)
    route.matched    // 匹配的路由记录数组(用于嵌套路由)


3. 对比表格

特性routerroute
类型路由管理器(主动控制导航)当前路由信息(被动反映状态)
典型用途跳转路由、全局配置获取参数、查询、路径等信息
修改 URL✅ 可以(通过 push/replace❌ 只读
响应式❌ 不是响应式对象✅ 是响应式对象(自动更新)
获取方式useRouter() 或 this.$routeruseRoute() 或 this.$route

4. 典型场景示例

场景 1:编程式导航(使用 router
import { useRouter } from 'vue-router'

const router = useRouter()

// 跳转到用户详情页(携带参数)
router.push({ name: 'User', params: { id: 123 } })
场景 2:获取动态参数(使用 route
<template>
  <div>User ID: {{ route.params.id }}</div>
</template>

<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
</script>

十一:路由传参

query参数

  1. 传递参数

    <!-- 跳转并携带query参数(to的字符串写法) -->
    <router-link to="/news/detail?a=1&b=2&content=欢迎你">
        跳转
    </router-link>
                    
    <!-- 跳转并携带query参数(to的对象写法) -->
    <RouterLink 
      :to="{
        //name:'xiang', //用name也可以跳转
        path:'/news/detail',
        query:{
          id:news.id,
          title:news.title,
          content:news.content
        }
      }"
    >
      {{news.title}}
    </RouterLink>

  2. 接收参数:

    import {useRoute} from 'vue-router'
    const route = useRoute()
    // 打印query参数
    console.log(route.query)

params参数

  1. 传递参数

    <!-- 跳转并携带params参数(to的字符串写法) -->
    <RouterLink :to="`/news/detail/001/新闻001/内容001`">{{news.title}}</RouterLink>
    				
    <!-- 跳转并携带params参数(to的对象写法) -->
    <RouterLink 
      :to="{
        name:'xiang', //用name跳转
        params:{
          id:news.id,
          title:news.title,
          content:news.title
        }
      }"
    >
      {{news.title}}
    </RouterLink>

  2. 接收参数:

    import {useRoute} from 'vue-router'
    const route = useRoute()
    // 打印params参数
    console.log(route.params)

备注1:传递params参数时,若使用to的对象写法,必须使用name配置项,不能用path

备注2:传递params参数时,需要提前在规则中占位。

 路由的props配置

作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件)

{
	name:'xiang',
	path:'detail/:id/:title/:content',
	component:Detail,

  // props的对象写法,作用:把对象中的每一组key-value作为props传给Detail组件
  // props:{a:1,b:2,c:3}, 

  // props的布尔值写法,作用:把收到了每一组params参数,作为props传给Detail组件
  // props:true
  
  // props的函数写法,作用:把返回的对象中每一组key-value作为props传给Detail组件
  props(route){
    return route.query
  }
}
### Vue3 路由注册与配置详解 #### 1. 安装 Vue Router 在 Vue3 中,推荐使用 Vue Router 4.x 版本来管理路由。首先需要安装该依赖库: ```bash npm install vue-router@4 --save # 或者 yarn add vue-router@4 ``` 完成安装后即可开始配置路由。 --- #### 2. 创建路由实例 在 Vue3 中,路由的初始化过程略有不同。以下是标准的路由创建流程: ```javascript // 导入必要的模块 import { createRouter, createWebHistory } from &#39;vue-router&#39;; import Home from &#39;./views/Home.vue&#39;; // 假设这是首页组件 import About from &#39;./views/About.vue&#39;; // 关于页面组件 const routes = [ { path: &#39;/&#39;, name: &#39;Home&#39;, component: Home }, // 主页路由 { path: &#39;/about&#39;, name: &#39;About&#39;, component: About } // 关于页面路由 ]; const router = createRouter({ history: createWebHistory(), // 使用 HTML5 History API routes // 注册路由规则 }); export default router; ``` 此部分展示了如何通过 `createRouter` 和 `createWebHistory` 来设置基本的路由结构[^1]。 --- #### 3. 在主文件中引入路由 接下来,在项目的入口文件(通常是 `main.js` 或 `main.ts`)中引入刚刚创建好的路由实例,并挂载到 Vue 应用上: ```javascript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; const app = createApp(App); app.use(router); // 注册路由 app.mount(&#39;#app&#39;); // 挂载应用 ``` 这一步骤确保了整个应用程序能够识别并响应路由的变化[^1]。 --- #### 4. 配置子路由 如果需要更复杂的功能,比如嵌套路由,可以按照以下方式进行配置: ```javascript import ParentComponent from &#39;./views/Parent.vue&#39;; import ChildA from &#39;./views/ChildA.vue&#39;; import ChildB from &#39;./views/ChildB.vue&#39;; const routes = [ { path: &#39;/parent&#39;, component: ParentComponent, children: [ // 子路由数组 { path: &#39;child-a&#39;, component: ChildA }, { path: &#39;child-b&#39;, component: ChildB } ] } ]; ``` 在此示例中,当访问 `/parent/child-a` 或 `/parent/child-b` 时,会分别加载对应的子组件[^2]。 --- #### 5. 在模板中使用 `<router-link>` 和 `<router-view>` 最后,在 Vue 文件中(如 `App.vue`),需要提供链接和视图区域以便用户导航以及展示对应的内容: ```html <template> <div id="app"> <!-- 提供导航链接 --> <router-link to="/">主页</router-link> | <router-link to="/about">关于</router-link> <!-- 显示匹配的组件 --> <router-view></router-view> </div> </template> <style scoped> /* 自定义样式 */ a { margin-right: 10px; } </style> ``` 这里的 `<router-link>` 用于生成指向各路由的超链接,而 `<router-view>` 则充当占位符,用来呈现当前激活的组件[^3]。 --- ### 总结 通过上述步骤,已经完成了 Vue3 的基础路由注册与配置。可以根据实际需求进一步扩展功能,例如添加动态参数、查询字符串支持或者全局守卫等高级特性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值