当前位置: 首页 > news >正文

Vue-Router 基础使用

Vue Router 是 Vue 官方的客户端路由解决方案。

客户端路由的作用是在单页应用 SPA 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时,URL 会随之更新,但页面不需要从服务器重新加载。

Vue Router 基于 Vue 的组件系统构建,你可以通过配置路由来告诉 Vue Router 为每个 URL 路径显示哪些组件。

1. 基础入门原理与示例

1.1. 初识Vue-Router

Vue-Router 是 Vue.js 官方的路由管理器,它能够创建单页应用 SPA,通过在应用中创建不同的视图和路径。

1.2. 安装与配置

使用npm安装: npm install vue-router

配置Vue-Router:

import Vue from 'vue';
import Home from './views/Home.vue';
import About from './views/About.vue';Vue.use(router);const routes = [{ path: '/', component: Home },{ path: '/about', component: About }
];const router = new VueRouter({routes
});new Vue({router,render: h => h(App)
}).$mount('#app');

1.3. 基本示例

创建两个简单的组件并设置路由。

在Vue实例中使用 <router-view> 来显示路由对应的组件。

<div id="app"><router-link to="/">Home</router-link><router-link to="/about">About</router-link><router-view></router-view>
</div>

我们还可以在组件中通过访问实例,使用方法进行路由跳转。

export default {methods: {goToAbout() {this.$router.push('/about')},},
}

如果是 Composition API,则可以使用如下方法。

<script setup>
import { computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'const router = useRouter()
const route = useRoute()const search = computed({get() {return route.query.search},set(search) {router.replace({ query: { search } })}
});
</script>

2. 动态路由

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数:

import User from './User.vue'
// 这些都会传递给 `createRouter`
const routes = [// 动态字段以冒号开始{ path: '/users/:id', component: User },
]

现在像 /users/1 和 /users/2 这样的 URL 都会映射到同一个路由。

路径参数用冒号:表示。当一个路由被匹配时,它的 params 的值将在每个组件中以 route.params 的形式暴露出来。因此,我们可以通过更新 User 的模板来呈现当前的用户 ID。

<template><div><!-- 当前路由可以通过 $route 在模板中访问 -->User {{ $route.params.id }} </div>
</template>

2.1. 获取路由参数

获取路由参数的方式有几种,通常我们分为模板中获取和 JavaScript 逻辑中获取,分别为:

1. 在模板中消费参数

const User = {template: '<div>User {{ $route.params.id }}</div>'
};

2. 在 JavaScript 中使用参数

<script setup>import { watch } from 'vue'import { useRoute } from 'vue-router'const route = useRoute()watch(() => route.params.id, (newId, oldId) => {// 对路由变化做出响应...}
</script>

2.2. 捕获所有路由或404 Not found 路由

常规参数只匹配 url 片段之间的字符,用 / 分隔。如果我们想匹配任意路径,我们可以使用自定义的 路径参数 正则表达式,在 路径参数 后面的括号中加入 正则表达式:

const routes = [// 将匹配所有内容并将其放在 `route.params.pathMatch` 下{ path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFound },// 将匹配以 `/user-` 开头的所有内容,并将其放在 `route.params.afterUser` 下{ path: '/user-:afterUser(.*)', component: UserGeneric },
]

3. 路由嵌套

一些应用程序的 UI 由多层嵌套的组件组成。在这种情况下,URL 的片段通常对应于特定的嵌套组件结构,例如:

3.1. 配置嵌套路由

配置子路由如下:

const routes = [{ path: '/user/:id', component: User,children: [{path: 'profile',component: UserProfile},{path: 'posts',component: UserPosts}]}
];

3.2. 使用嵌套路由组件

在父组件中使用 <router-view> 来显示子路由组件。

<div><h2>User {{ $route.params.id }}</h2><router-link to="profile">Profile</router-link><router-link to="posts">Posts</router-link><router-view></router-view>
</div>

3.3. 嵌套路由命名

嵌套路由可以进行命名,方便在后续使用中管理。

const routes = [{path: '/user/:id',component: User,// 请注意,只有子路由具有名称children: [{ path: '', name: 'user', component: UserHome }],},
]

4. 路由跳转

路由的跳转方式有很多种,总结如下:

RouterLink:

<RouterLink to="/about">Go to About</RouterLink>

实例方法跳转:

export default {methods: {goToAbout() {this.$router.push('/about')},},
}

Composition API:

<script setup>import { computed } from 'vue'import { useRoute, useRouter } from 'vue-router'const router = useRouter()router.push('/about')// 命名的路由,并加上参数,让路由建立 urlrouter.push({ name: 'user', params: { username: 'eduardo' } })router.go(1)
</script>
http://www.xdnf.cn/news/703711.html

相关文章:

  • 结构性设计模式之Bridge(桥接)
  • 如何处理 Python 入门难以进步的现象
  • 常见路由协议解析:从原理到应用场景
  • 深入解析 Spring @Transactional 的事务开启机制
  • 谈谈iostat
  • 企业信息化/数字化项目管理办法V3.0
  • 红棉花板材亮相德国科隆展 东方智造赋能全球家居未来
  • 二重积分 -- 立体的体积
  • C++与Java类和对象的异同
  • 依赖nacos实例动态创建线程池并监听服务上下线
  • 深度解读漏洞扫描:原理、类型与应用实践
  • PostGIS栅格数据类型解析【geomval】
  • makefile学习笔记
  • Java图片处理实战:Imgscalr技术方案
  • 视觉中国:镜头下的中国发展图景
  • C++030(内联函数)
  • Δ-Σ ADC的工作原理
  • 2025东北CCPC(部分+详解)
  • Java从入门到精通 - 面向对象编程基础
  • 将can日志数据提取到excle中
  • HOMIE——遥操类似ALOHA主从臂的外骨骼驾驶舱收集数据:通过上肢模仿学习和全身控制RL训练自主策略
  • JVM虚拟机监控及性能调优实战!
  • mqtt c语言publish topic
  • 6 质量控制中的常用缩略语和符号(OEE)以及解释
  • 嵌入式学习之系统编程(七)线程的控制(互斥与同步)和死锁
  • CPG开源项目对比
  • 18度的井水
  • C++补充基础小知识:为什么要继承、什么时候继承、什么时候直接用
  • 高并发计数器LongAdder 实现原理与使用场景详解
  • Jmeter性能测试(应用场景、性能测试流程、搭建测试环境)