Vue中路由的使用

本文详细介绍了如何在Vue项目中安装和使用vue-router,包括设置路由、创建组件、导出路由、在应用中集成以及子路由的实现,帮助开发者理解和实践Vue的路由功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 作用

2 使用方法

2.1 安装路由

2.2 创建路由并导出

2.3 在应用实例中使用vue-router

2.4 声明router-view,展示组件内容

2.5 页面跳转

3 补充内容-子路由


1 作用

能够按不同的访问路径,展示不同组件的内容。

2 使用方法

2.1 安装路由

在项目的终端或者路径下的命令提示符窗口中,写入以下命令(其中的4是指版本为4):

npm install vue-router@4

2.2 创建路由并导出

①在src目录下创建一个router文件夹,再在其中创建index.js文件

注:当然,其它名字.js也可以,只不过2.3的导入需要额外书写内容

②向index.js中书写以下格式内容:

//引入依赖
import { createRouter, createWebHistory } from 'vue-router'

//导入组件
//xx和yy可以替换为实际的内容
import XxVue from '@/views/Xx.vue'
import YyVue from '@/views/Yy.vue'

//定义路由关系
const routes = [
    //这样就可以通过http://localhost:5173/Xx访问Xx.vue的内容了
    { path: '/Xx', component: XxVue},
    //同理,可以访问Yy.vue。并将其作为默认页面
    { path: '/', component: YyVue}
]

//定义路由
const router = createRouter({
    //history是路由模式,还有一种哈希方式(createWebHashHistory),配置方式自行探索
    history: createWebHistory(),
    routes: routes
})

//导出路由
export default router

2.3 在应用实例中使用vue-router

在main.js中引入如下内容:

//这里只展示主要内容,其它内容...
import { createApp } from 'vue'
import App from './App.vue'

//导入路由,默认导入index.js
//如果不是index.js,而是xx.js,则from '@/router/xx.js'
import router from '@/router'

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

2.4 声明router-view,展示组件内容

在App.vue中的<template>内添加如下,进去的默认页面就是Yy.vue了:

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

2.5 页面跳转

如果想在某个函数执行之后,想跳转某个页面,可以如下使用:

①在该函数所在的页面导入,如xx.vue:

import {useRouter} from 'vue-router'

②找到该函数,并向其中添加如下内容:

const xx = async() => {
    //其它内容...
    //router.push跳转到指定页面,这里是默认页面
    router.push('/')
}

3 补充内容-子路由

如下图所示,App.vue使用的叫一级路由,X.vue使用的就属于二级路由(X->Z,X->H),其中二级路由就可以称为一级路由的子路由,:

如element-ui中的例子所示,要在当前页面访问的Option1就属于子路由:

配置如下,在index.js中新增一些内容:

//引入依赖
import { createRouter, createWebHistory } from 'vue-router'

//导入组件
//xx和yy可以替换为实际的内容
import XxVue from '@/views/Xx.vue'
import YyVue from '@/views/Yy.vue'
import ZzVue from '@/views/Zz.vue'
import HhVue from '@/views/Hh.vue'

//定义路由关系
const routes = [
    //这样就可以通过http://localhost:5173/Xx访问Xx.vue的内容了
    { path: '/Xx', component: XxVue},
    //同理,可以访问Yy.vue。并将其作为默认页面
    //redirect:'/func/xyz'是将Zz.vue页面作为进入'/'默认的访问的页面
    //children:子路由
    { path: '/', component: YyVue,redirect:'/func/xyz', children:[
        { path: '/func/xyz', component: ZzVue},
        { path: '/func/zxy', component: HhVue},
    ]}
]

//定义路由
const router = createRouter({
    //history是路由模式,还有一种哈希方式(createWebHashHistory),配置方式自行探索
    history: createWebHistory(),
    routes: routes
})

//导出路由
export default router

<think>好的,我现在需要帮助用户了解Vue.js中的路由守卫使用方法,特别是全局守卫。首先,我应该回顾一下已有的引用内容,确保信息准确。根据用户提供的引用,路由守卫分为全局守卫、路由独享守卫和组件内守卫。全局守卫包括前置守卫(beforeEach)、解析守卫(beforeResolve)和后置守卫(afterEach)。这些守卫在路由跳转的不同阶段执行,用于权限控制、日志记录等。 接下来,我需要整理这些信息,按照用户要求的格式回答。用户希望结构清晰,逐步解释,并且正确使用LaTeX格式。同时,需要生成相关问题,并在引用处标注正确的标识符。 首先,我需要介绍全局守卫的三种类型,分别说明它们的用途和示例代码。比如,前置守卫用于路由跳转前的权限验证,需要调用next()才能继续。然后,路由独享守卫是在路由配置中单独定义的beforeEnter方法,适用于特定路由的权限控制。最后,组件内守卫包括beforeRouteEnter、beforeRouteUpdate和beforeRouteLeave,这些在组件内定义,处理组件相关的逻辑。 在写作过程中,要确保所有行内代码和变量用$...$包裹,比如$router.beforeEach$,而独立代码块用三个反引号包裹,并指定语言为javascript。此外,引用标注要正确,例如在提到全局守卫时引用[^1][^2][^5]。 完成回答后,需要生成三个相关问题,可能涉及守卫执行顺序、登录状态验证的实现,或不同守卫的使用场景区别。这些问题应该帮助用户进一步理解路由守卫的应用。 最后,检查LaTeX语法是否正确,例如数学表达式是否正确使用$...$,独立公式是否用$$...$$。同时,确保回答使用中文,结构清晰,分步骤说明,并正确标注所有引用来源。</think>### Vue 路由守卫使用方法(全局守卫) Vue 路由守卫用于控制路由跳转过程,分为**全局守卫**、**路由独享守卫**和**组件内守卫**三类。以下重点介绍全局守卫的使用方法: --- #### 一、全局守卫 全局守卫作用于整个路由系统,包含三种类型: 1. **全局前置守卫 `beforeEach`** 在路由跳转**前**执行,常用于权限验证、页面跳转拦截等。 ```javascript router.beforeEach((to, from, next) => { if (需要权限验证 && 用户无权限) { next('/login'); // 重定向到登录页 } else { next(); // 放行 } }); ``` - `to`: 目标路由对象 - `from`: 当前路由对象 - `next()`: **必须调用**以继续流程[^4][^5]。 2. **全局解析守卫 `beforeResolve`** 在路由跳转**确认前**执行(组件内守卫和异步组件解析完成后)。 ```javascript router.beforeResolve((to, from, next) => { console.log('路由即将跳转'); next(); }); ``` 适用于需要**最终确认**的场景,如数据预加载[^5]。 3. **全局后置守卫 `afterEach`** 在路由跳转**完成后**执行,常用于日志记录或页面统计。 ```javascript router.afterEach((to, from) => { sendToAnalytics(to.path); // 发送页面访问统计 }); ``` - **无**`next`参数,无法阻止跳转[^5]。 --- #### 二、路由独享守卫 在单个路由配置中定义,仅作用于该路由: ```javascript const routes = [ { path: '/admin', component: AdminPage, beforeEnter: (to, from, next) => { if (用户非管理员) next('/403'); // 权限校验 else next(); } } ]; ``` 适用于特定路由的权限控制[^5]。 --- #### 三、组件内守卫 在组件内部定义,控制组件级路由行为: - `beforeRouteEnter`: 进入组件前调用(无法访问`this`) - `beforeRouteUpdate`: 路由变更但组件复用时调用 - `beforeRouteLeave`: 离开组件前调用(如阻止未保存表单的离开) ```javascript export default { beforeRouteLeave(to, from, next) { if (表单未保存) { if (confirm('确定离开?')) next(); else next(false); // 取消跳转 } else { next(); } } }; ``` 适用于组件级别的逻辑控制[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厂里英才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值