Vue中的路由Router

前言

在 Vue.js 中,单页面应用(SPA)的实现通常需要一个路由管理器,如 vue-router。尽管每个 .vue 文件本身就是一个组件,但我们希望用户在浏览器地址栏输入不同的 URL 时,能够看到不同的组件(即页面)内容。这就涉及到路由的概念,即通过 URL 映射到不同的组件上。

路由

Vue 中所有的 .vue 文件都是一个组件,这个组件最终会被 Vue 读取,并编译成一段 div 结构,挂载在唯一的 html 文件中,所以 x 想要实现组件之间的切换很简单。

但是,想要将某些组件当成页面(每个页面对应的 url 都是唯一的)来使用,默认情况下就行不通。

那么,我们就需要一个可以将代码片段的切换模拟成页面跳转的样子 的这样一个手段,这就是 Vue-Router

这里我们用掘金的首页作为例子 进入后默认为suggest页面:

点击Bot,跳转到bot界面

点击去沸点,跳转到hot界面:

Vue Router 的作用

vue-router 是 Vue.js 官方提供的路由管理器,它允许开发者将应用的不同组件映射到不同的 URL 路径。通过配置路由规则,vue-router 可以监听 URL 的变化,当 URL 发生改变时,自动切换显示的组件。这样,即使在同一个 HTML 文件中,用户也可以体验到类似多页面应用的页面跳转效果。

路由的配置

在 Vue.js 应用中使用 vue-router,首先需要安装它,然后在主文件中引入并配置路由。基本的配置步骤如下:

  1. 安装 vue-router : 根据官方提供的文档(router.vuejs.org/zh/installa...

我们在终端输入:

bash 复制代码
npm install vue-router@4
  1. 创建并配置路由

我们可以在项目中创建一个路由配置文件,例如 router.js,并在其中定义路由规则:

javascript 复制代码
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../pages/Home.vue';
import Hot from '../pages/Hot.vue';
import { resolveDirective } from 'vue';


const routes = [
{
 path: '/',
 redirect: '/home'
},
{
 path: '/home',
 component: Home,
 children: [
   {
     path: '/home',
     redirect: '/home/suggest'
   },
   {
     path: '/home/newest',
     component: () => import('../pages/home/Newest.vue')
   },
   {
     path: '/home/suggest',
     component: () => import('../pages/home/Suggest.vue')
   }
 ]
},
{
 path: '/bot',
 component: () => import('../pages/Bot.vue')
},
{
 path: '/hot/:id',
 component: Hot
}
]

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

export default router 
  1. 在主文件中使用路由 : 在 main.js 文件中引入配置好的路由器,并使用它:
javascript 复制代码
 import { createApp } from 'vue'
 import App from './App.vue'
 import router from './router/index.js'

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

二级路由

二级路由,或者说嵌套路由,是指在一个父级路由下定义多个子级路由。在 vue-router 中,可以在父级路由组件内部使用 <router-view> 标签来渲染子级路由组件。配置示例如下:

javascript 复制代码
const routes = [
  {path: '/',redirect: '/home'},
  {path: '/home',component: Home,
  children: [
      {path: '/home',redirect: '/home/suggest'},
      {path: '/home/newest',component: () => import('../pages/home/Newest.vue')},
      {path: '/home/suggest',component: () => import('../pages/home/Suggest.vue')}
    ]},
  {path: '/bot',component: () => import('../pages/Bot.vue')},
  {path: '/hot/:id',component: Hot}
]

跳转

在 Vue 中,有多种方式可以进行路由跳转:

使用 <router-link> 组件

这是最常见的路由跳转方式,只需要在 HTML 中使用 <router-link> 组件,并设置 to 属性即可:

html 复制代码
  <div>
 <nav>
 <!-- 路由跳转页面 -->
   <router-link to="/home">首页</router-link>|
   <router-link to="/bot">BOT</router-link>|
   <router-link to="/hot">沸点</router-link>
 </nav>
 <!-- 路由入口 -->
 <router-view></router-view>
   </div>

<router-view> 标签的位置将会显示与当前 URL 相关联的组件内容,而无需重新加载整个页面。

使用编程式导航

在组件的方法中使用 $router.push$router.replace 方法进行跳转:

javascript 复制代码
import { useRouter } from 'vue-router'

const router = useRouter()

const toHot = () => {//'去沸点'的按钮绑定了点击事件toHot
//跳转到沸点页面
// router.push('/hot') 不带参数版
router.push({ path: '/hot', query: { id: 1 } })//带参数版

}

参数

在进行路由跳转时,可以通过 queryparams 两种方式传递参数:

  1. 使用 query

    类似于 URL 中的查询参数,可以使用 query 对象来传递参数:

    javascript 复制代码
    this.$router.push({ path: '/hot', query: { id: 1 } });

    在目标组件中,可以通过 this.$route.query.id 来访问这个参数。

  2. 使用 params

    当使用带有动态段 的路由时,可以使用 params 对象来传递参数。例如,路由定义为 /user/:id,则在跳转时可以这样传递参数:

    javascript 复制代码
    this.$router.push({ name: 'user', params: { id: 1 } });

    在目标组件中,可以通过 this.$route.params.id 来访问这个参数。

结语

以上对就是本文全部内容,本文介绍了从 vue-router 的安装、配置、使用到高级功能如嵌套路由和参数传递等各个方面。希望这对你理解 Vue.js 单页面应用中的路由有所帮助。感谢你的阅读!

相关推荐
cc蒲公英11 分钟前
vue2中使用vue-office库预览pdf /docx/excel文件
前端·vue.js
A阳俊yi1 小时前
Vue(13)——router-link
前端·javascript·vue.js
4triumph1 小时前
Vue.js教程笔记
前端·vue.js
程序员大金2 小时前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis
清灵xmf2 小时前
提前解锁 Vue 3.5 的新特性
前端·javascript·vue.js·vue3.5
程序员大金2 小时前
基于SpringBoot的旅游管理系统
java·vue.js·spring boot·后端·mysql·spring·旅游
二川bro2 小时前
Vue 修饰符 | 指令 区别
前端·vue.js
程序员大金3 小时前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
尸僵打怪兽3 小时前
后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)
前端·javascript·vue.js·elementui·axios·博客·后台管理系统
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源