首页 > 其他分享 >全面掌握 Vue 路由:从基础到进阶

全面掌握 Vue 路由:从基础到进阶

时间:2024-07-15 16:30:57浏览次数:14  
标签:Vue 进阶 守卫 vue 组件 router 路由

标题:全面掌握 Vue 路由:从基础到进阶

在现代前端开发中,单页面应用(SPA)已经成为主流,而路由作为 SPA 的核心功能之一,起着至关重要的作用。Vue.js 作为一个流行的前端框架,其官方路由库 vue-router 提供了强大且灵活的路由管理功能。本文将深入探讨 Vue 路由的使用,包括基础配置、动态路由、嵌套路由、路由守卫等内容,并通过代码示例帮助你全面掌握 Vue 路由。

一、基础配置

在开始使用 Vue 路由之前,我们需要先安装 vue-router

npm install vue-router

安装完成后,我们可以在 Vue 应用中配置路由:

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';

Vue.use(VueRouter);

const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About },
];

const router = new VueRouter({
mode: 'history',
routes,
});

new Vue({
router,
render: h => h(App),
}).$mount('#app');

在上述代码中,我们首先引入了 vue-router 并将其注册为 Vue 的插件。接着,我们定义了一个路由数组 routes,其中每个路由都包含一个路径和对应的组件。最后,我们创建了一个 VueRouter 实例,并将其传递给 Vue 实例。

二、动态路由

动态路由允许我们在路径中使用参数,从而实现更灵活的导航。例如,我们可以定义一个用户详情页的路由:

const routes = [
{ path: '/user/:id', component: User },
];

User 组件中,我们可以通过 this.$route.params 访问路由参数:

export default {
mounted() {
console.log(this.$route.params.id);
},
};

三、嵌套路由

嵌套路由允许我们在一个路由组件中嵌套另一个路由组件,从而实现更复杂的页面结构。例如,我们可以定义一个用户页面,其中包含用户信息和用户设置两个子页面:

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

User 组件中,我们需要使用 <router-view> 来渲染子路由组件:

<template>
<div>
<h1>User {{ $route.params.id }}</h1>
<router-view></router-view>
</div>
</template>

四、路由守卫

路由守卫允许我们在路由导航过程中执行一些逻辑,例如权限验证。Vue 路由提供了多种类型的路由守卫,包括全局守卫、路由独享守卫和组件内守卫。

全局守卫

全局守卫会在每次路由导航时触发。我们可以使用 router.beforeEach 注册一个全局前置守卫:

router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !auth.isLoggedIn()) {
next('/login');
} else {
next();
}
});

在上述代码中,如果目标路由需要认证且用户未登录,我们将用户重定向到登录页面。

路由独享守卫

路由独享守卫是在路由配置中定义的守卫。例如,我们可以在用户页面路由中添加一个前置守卫:

const routes = [
{
path: '/user/:id',
component: User,
beforeEnter: (to, from, next) => {
if (!auth.isLoggedIn()) {
next('/login');
} else {
next();
}
},
},
];

组件内守卫

组件内守卫是在组件中定义的守卫。例如,我们可以在 User 组件中添加一个路由更新守卫:

export default {
beforeRouteUpdate(to, from, next) {
// 在路由更新时执行一些逻辑
next();
},
};

五、总结

本文深入探讨了 Vue 路由的使用,包括基础配置、动态路由、嵌套路由和路由守卫等内容。通过这些知识和代码示例,相信你已经能够在实际项目中灵活运用 Vue 路由,构建出功能强大且结构清晰的单页面应用。希望这篇文章能对你有所帮助,祝你在 Vue 开发的道路上越走越远!

百万大学生都在用的AI写论文工具,篇篇无重复

标签:Vue,进阶,守卫,vue,组件,router,路由
From: https://www.cnblogs.com/zhizu/p/18303426

相关文章

  • d3.js+vue生成动力图
    本文主要实现了动力图中:    节点的显示;        节点与节点之间关系的连接,以及对应的关系类型的显示;    节点的拖拽;    图谱的缩放1.先上效果:2.以下是完整的代码部分:<template><divref="chart"className="ggraph"></div></templ......
  • 【vue深入学习第2章】Vue.js 中的 Ajax 处理:vue-resource 库的深度解析
    Vue.js中的Ajax处理:vue-resource库的深度解析在现代前端开发中,Ajax请求是与后端进行数据交互的关键技术。Vue.js作为一个渐进式JavaScript框架,提供了多种方式来处理Ajax请求,其中vue-resource是一个较为常用的库。尽管vue-resource在Vue2.x之后不再是官方推荐的......
  • 2024-07-15 记录一则vue网站优化的小技巧
    vite+vue+某框架写的网站可以通过配置vite.config.js中的build.rollupOptions.output.manualChunks来手动分割指定的包到指定的文件夹内,然后在网站入口文件按照需求引入比如:build:{rollupOptions:{output:{manualChunks:{antd......
  • vue3中的props和emit
    首先我们要明确props和emit是在父子组件(嵌套组件)中使用的。想要在父组件中渲染出子组件里的内容,需要在父组件中导入子组件,并在模板中渲染子组件。那父子组件中如何通信呢?就需要使用到props和emit。props当子组件要接受父组件传递的数据信息时,也可以说是父组件传递数据给子......
  • vue ui + 项目创建 (基于vue脚手架创建项目)
    =======================注意全程都不要关闭cmd窗口========================= 在想要创建项目的文件目录输入cmd回车,再输入vueui (如果出现报错,可能是因为有hadoop,存在hadoop的环境变量会报错,但也能打开网页)出现下图创建——》在此创建新项目 如下图,项目名不要有中文......
  • Spring Boot Vue 毕设系统讲解 11【协同过滤方法教学】
    目录1.基础知识用户基于的协同过滤(User-basedCF)物品基于的协同过滤(Item-basedCF)优缺点实际应用2.项目功能实战1.基础知识协同过滤(CollaborativeFiltering,CF)是一种广泛应用于推荐系统中的算法,它通过分析和利用用户与物品之间的交互信息来发现用户可能感兴趣......
  • 【vue深入学习第1章】探索 Vue 2 的生命周期:从创建到销毁
    Vue.js是一个渐进式的JavaScript框架,用于构建用户界面。理解Vue的生命周期是掌握这个框架的关键之一。在这篇博客中,我们将深入探讨Vue2的生命周期,并通过代码示例来展示每个生命周期钩子的作用。Vue实例的生命周期Vue实例的生命周期可以分为四个主要阶段:创建阶段:初始......
  • Vue3+Element Plus 使用sortablejs对el-table表格进行拖拽
    sortablejs官网:点击跳转一、安装sortablejsnpminstallsortablejs--save二、 页面按需引入importSortablefrom'sortablejs';三、组件方法1.temlate:<template><el-tableref="tableHeader":data="tableData"row-key="id"style=&quo......
  • vue3+Element Plus 自定义表格单选 多选
    项目背景:用vue3+elementplus做一套考试系统功能场景:添加试题中分为客观题、主观题两种类型,在客观题会出现单选题、多选题两种类型就会导致单选题只能勾选一个答案、多选题能勾选多个答案。效果图废话不说直接上代码<el-buttonclass="btn"icon="Plus"plainst......
  • Vue2中的进度条案例
     v-bind对于样式控制的增强--操作style语法::style=“样式对象”适用于某个具体属性的动态设置<divclass="box":style="{css属性名1:css属性值,css属性名2:css属性值}"></div><!DOCTYPEhtml><htmllang="en"><head><metacharset=......