首页 > 其他分享 >Vue3 + Vue Router实现动态路由导航

Vue3 + Vue Router实现动态路由导航

时间:2024-08-25 14:56:42浏览次数:15  
标签:vue name Vue3 Vue router Router 动态 路由

Vue 3 + Vue Router 实现动态路由导航

随着单页面应用程序(SPA)的日益流行,前端开发逐渐向复杂且交互性强的方向发展。在这个过程中,Vue.js及其生态圈的工具(如Vue Router)为我们提供了强大的支持。本文将介绍如何在Vue 3中使用Vue Router实现动态路由导航,帮助你增强应用的灵活性和可扩展性。

什么是动态路由?

动态路由是指在运行时根据应用的状态或用户的行为来生成或修改路由。它与静态路由不同,静态路由在应用启动时就已经被定义好,而动态路由则允许应用根据实际需求来控制导航。

项目准备

在开始之前,我们需要搭建一个Vue 3的基本项目,首先,确保你已经安装Vue CLI。打开终端并使用以下命令创建新项目:

vue create dynamic-router-example

在交互式选择中,确保选择Vue 3选项。安装完成后,进入项目文件夹:

cd dynamic-router-example

然后安装Vue Router:

vue add router

在提示中,选择 “yes” 来使用历史模式。你的项目现在已经准备就绪。

项目结构

在项目的 src 文件夹中,可以看到main.jsrouter/index.js文件。接下来,我们将一些动态路由和Vue组件添加到项目中。

实现动态路由

我们将创建一个动态路由示例,用户可以输入一个名称,动态地为该名称创建路由。以下是实现的步骤。

1. 配置路由

src/router/index.js 中添加一个动态路由配置:

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import DynamicRoute from '../views/DynamicRoute.vue'

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/user/:name', // 动态路由
    name: 'User',
    component: DynamicRoute
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

export default router

在这里,我们定义了一个动态路由 '/user/:name'name 是动态的部分,将在后面根据用户输入动态生成。

2. 创建动态路由组件

接下来,创建一个新的组件 DynamicRoute.vue。在 src/views/ 目录下创建这个文件,并添加以下代码:

<template>
  <div>
    <h2>用户页面</h2>
    <p>欢迎,{{ username }}!</p>
    <router-link to="/">返回主页</router-link>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { useRoute } from 'vue-router'

const route = useRoute()
 username = ref(route.params.name) // 获取动态参数
</script>

<style scoped>
h2 {
  color: #42b983;
}
</style>

在这个组件中,我们使用了 Composition API 的 setup 函数来获取路由参数。useRoute 能够使我们轻松访问当前路由的信息。

3. 创建输入表单以导航动态路由

接下来,我们将在 Home.vue 中添加一个表单,用户可以通过这个表单输入名称以进行导航。

编辑 src/views/Home.vue 文件,内容如下:

<template>
  <div>
    <h1>主页</h1>
    <form @submit.prevent="navigate">
      <label for="username">输入用户名:</label>
      <input type="text" v-model="name" id="username" required />
      <button type="submit">跳转</button>
    </form>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const name = ref('')
const router = useRouter()

const navigate = () => {
  if(name.value) {
    router.push({ name: 'User', params: { name: name.value }})
  }
}
</script>

<style scoped>
h1 {
  color: #35495e;
}
form {
  margin-top: 20px;
}
</style>

在表单中,我们使用 v-model 将输入框的值和组件的 name 变量进行绑定。表单的 submit 事件会触发 navigate 方法,利用路由 push 方法来实际导航到动态路由。

4. 完成代码

现在,你的项目结构和代码应该大致如下:

src/
├── main.js
├── router/
│   └── index.js
├── views/
│   ├── DynamicRoute.vue
│   └── Home.vue
└── App.vue

确保 App.vue 中包含 <router-view /> 来显示我们定义的路由组件:

<template>
  <router-view />
</template>

测试应用

在终端中运行以下命令以启动应用:

npm run serve

在浏览器中访问 http://localhost:8080/,你应该能够看到主页的输入框。输入用户名后,点击跳转按钮,应用将动态转到对应的用户页面,并展示对应的用户名。

总结

动态路由在现代单页面应用中具有不可或缺的作用。通过这篇文章,我们展示了如何在Vue 3中利用Vue Router实现动态路由导航。采用Composition API和Vue Router的结合,确保了代码的简洁和可扩展性。


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

书籍详情
在这里插入图片描述

标签:vue,name,Vue3,Vue,router,Router,动态,路由
From: https://blog.csdn.net/yuanlong12178/article/details/141529306

相关文章

  • 063、Vue3+TypeScript基础,作用域插槽的使用
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 061、Vue3+TypeScript基础,插槽中增加图片和控制视频
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • 062、Vue3+TypeScript基础,插槽中使用具名插槽
    01、main.js代码如下://引入createApp用于创建Vue实例import{createApp}from'vue'//引入App.vue根组件importAppfrom'./App.vue'//引入emitter用于全局事件总线//importemitterfrom'@/utils/emitter'constapp=createApp(App);//App.vue的根元素id为......
  • vue中的nextTick到底是什么!!!
    一、js执行机制js是单线程语言单线程:指一个时间只能做一件事,进行一个任务时,不能同时进行其他任务。疑问:一个时间只能做一件事,不能并行处理,那效率必然很低啊,为什么不能是多线程呢?原因:是否多线程这个取决于语言的用途,一个很简单的例子,如果同一时间,一个添加了 DOM,一个删除了......
  • 计算机毕业设计django+vue共享自习室系统【开题+程序+论文】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会对终身学习和自我提升需求的日益增长,共享自习室作为一种新兴的学习空间模式,逐渐受到广大学习者的青睐。然而,传统的自习室管理方式......
  • 计算机毕业设计django+vue基于Android的婚物语APP的设计与实现【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分,特别是在婚嫁领域,移动应用以其便捷性、实时性和个性化服务的......
  • 基于Node.js+vue外卖系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和智能设备的普及,人们的生活方式正经历着深刻的变革。其中,外卖服务作为互联网+餐饮行业的典型代表,以其便捷性、多样性和高效性迅速......
  • 基于Node.js+vue水产养殖生产管理系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着农业现代化进程的加速,水产养殖业作为农业的重要组成部分,正逐步向规模化、智能化、精细化管理转变。然而,传统水产养殖管理模式存在信息孤岛、效率低下、......
  • 基于Node.js+vue人事系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着企业规模的扩大与业务复杂度的提升,传统的人事管理方式已难以满足高效、精准的管理需求。人力资源管理作为企业发展的核心驱动力之一,其信息化、智能化水......
  • 基于Node.js+vue数码论坛系统设计与实现(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字化生活已成为人们不可或缺的一部分,其中数码产品作为连接现实与虚拟世界的桥梁,其热度与影响力日益增强。众多数码爱好者渴望有......