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 单页面应用中的路由有所帮助。感谢你的阅读!

相关推荐
只会写Bug31 分钟前
后台管理项目中关于新增、编辑弹框使用的另一种展示形式
前端·vue.js
M ? A1 小时前
Vue v-bind 转 React:VuReact 怎么处理?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
军军君011 小时前
数字孪生监控大屏实战模板:政务服务大数据
前端·javascript·vue.js·typescript·前端框架·echarts·less
忆往wu前2 小时前
前端请求三部曲:Ajax / Fetch / Axios 演进与 Vue 工程化封装
前端·vue.js
.Cnn3 小时前
Ajax与Vue 生命周期核心笔记
前端·javascript·vue.js·笔记·ajax
吴声子夜歌3 小时前
Vue3——渲染函数
前端·vue.js·vue·es6
Ruihong4 小时前
你的 Vue KeepAlive 组件,VuReact 会编译成什么样的 React 代码?
vue.js·react.js·面试
Ruihong4 小时前
你的 Vue slot 插槽,VuReact 会编译成什么样的 React 代码?
vue.js·react.js·面试
一 乐4 小时前
房产租赁管理|基于springboot + vue房产租赁管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·房产租赁管理系统
2501_913680004 小时前
Vue3项目快速接入AI助手的终极方案 - 让你的应用智能升级
前端·vue.js·人工智能·ai·vue·开源软件