Vue Router:让你的应用路由起来!

news2024/9/25 13:14:33

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 1. 路由导航
    • 2. 嵌套路由
    • 3. 路由参数
    • 4. 路由过渡
    • 5. 导航守卫
    • 6. 路由状态管理

Vue Router 是 Vue.js 官方的路由管理器,它提供了一种机制来实现单页面应用(SPA)的路由功能。主要作用包括:

1. 路由导航

Vue Router 允许你在应用程序中定义不同的路由,并根据用户的导航操作跳转到相应的路由。它通过监听 URL 的变化来响应导航操作,并能够使用编程方式进行路由跳转。

当使用 Vue Router 时,可以通过以下代码案例来演示如何定义路由、监听导航操作以及进行编程式的路由跳转:

首先,安装并导入 Vue Router:

npm install vue-router
import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter);

然后,定义路由组件:

// Home.vue
<template>
  <div>
    <h2>Home</h2>
    <p>Welcome to the home page!</p>
  </div>
</template>

// About.vue
<template>
  <div>
    <h2>About</h2>
    <p>This is the about page.</p>
  </div>
</template>

接下来,创建一个 Vue Router 实例并配置路由:

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

const router = new VueRouter({
  routes
});

在 Vue 根实例中使用 <router-view> 来渲染匹配的组件:

new Vue({
  router,
  el: '#app'
});
<!-- App.vue -->
<template>
  <div id="app">
    <h1>My App</h1>
    <router-view></router-view>
  </div>
</template>

现在,你可以根据用户的导航操作触发路由跳转,或者使用编程式的导航方式进行路由跳转:

// 监听导航操作
router.beforeEach((to, from, next) => {
  // 做一些导航守卫的逻辑处理
  next();
});

// 编程式路由跳转
// 使用 $router.push 方法跳转到指定路由
router.push('/about');

通过以上代码案例,你可以更好地理解 Vue Router 的使用方式,并实现在应用程序中定义不同的路由,并根据用户的导航操作进行路由跳转的功能。

2. 嵌套路由

Vue Router 支持嵌套路由,可以在一个父路由下定义子路由。这样可以轻松地实现页面的层级嵌套和组织,使得应用程序的路由结构更加清晰和可维护。

当使用 Vue Router 来实现嵌套路由时,可以通过以下代码案例来演示如何定义父子路由的嵌套和组织:

首先,定义父路由和子路由的组件:

// Parent.vue
<template>
  <div>
    <h2>Parent</h2>
    <p>This is the parent page.</p>
    <router-view></router-view>
  </div>
</template>

// Child.vue
<template>
  <div>
    <h3>Child</h3>
    <p>This is the child page.</p>
  </div>
</template>

接下来,创建一个 Vue Router 实例并配置父子路由:

const routes = [
  {
    path: '/',
    component: Parent,
    children: [
      {
        path: '',
        component: Child
      },
      {
        path: 'child',
        component: Child
      }
    ]
  }
];

const router = new VueRouter({
  routes
});

在父路由组件中使用 <router-view> 标签来渲染子路由:

<template>
  <div>
    <h2>Parent</h2>
    <p>This is the parent page.</p>
    <router-view></router-view>
  </div>
</template>

现在,当访问父路由时,子路由的组件会被渲染到父路由组件的 <router-view> 中,形成嵌套路由的效果。

例如,当访问 / 路径时,父路由组件会渲染,并同时渲染子路由组件到父路由组件的 <router-view> 中。当访问 /child 路径时,父路由组件同样会被渲染,但子路由组件会根据路由配置进行渲染。

通过以上代码案例,你可以实现在 Vue Router 中创建父子路由的嵌套和组织,使得应用程序的路由结构更加清晰和可维护。

3. 路由参数

Vue Router 允许定义路由参数,这样可以在路由中传递参数,以实现动态路由的效果。参数可以通过 URL 的路径、查询字符串或者路由的配置项进行传递,从而实现对应组件的动态渲染和数据展示。

当使用 Vue Router 定义路由参数时,可以通过以下代码案例来演示如何传递参数和在组件中获取参数:

首先,定义带有参数的路由:

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

在上述代码中,:id 是路径参数,可以在路由中传递不同的值,例如 /user/1/user/2

然后,在组件中通过 $route.params 来获取传递的参数:

<template>
  <div>
    <h2>User Profile</h2>
    <p>User ID: {{ $route.params.id }}</p>
  </div>
</template>

<script>
export default {
  mounted() {
    const id = this.$route.params.id;
    // 根据传递的参数做一些逻辑处理
  }
};
</script>

使用 $route.params.id 可以获取路由中传递的参数,进行对应组件的动态渲染和数据展示。

另外,还可以在定义路由时指定查询字符串参数:

const routes = [
  {
    path: '/user',
    component: User,
    props: (route) => ({
      query: route.query
    })
  }
];

在上述代码中,route.query 是查询字符串参数,可以在 URL 中传递,例如 /user?id=1&name=John

然后,在组件中可以使用 props 接收查询字符串参数:

<template>
  <div>
    <h2>User Profile</h2>
    <p>User ID: {{ query.id }}</p>
    <p>User Name: {{ query.name }}</p>
  </div>
</template>

<script>
export default {
  props: ['query']
};
</script>

通过以上代码,你可以在 Vue Router 中定义路由参数,并在组件中获取路径参数或查询字符串参数,实现动态路由的效果,进行组件的动态渲染和数据展示。

4. 路由过渡

Vue Router 对页面切换时的过渡效果提供了内置的支持。通过配置路由的过渡效果,可以实现页面之间的平滑过渡和动画效果,提升用户体验。

当使用 Vue Router 对页面切换时提供过渡效果时,可以通过以下代码案例来演示如何配置路由过渡效果:

首先,定义需要应用过渡效果的组件:

// Home.vue
<template>
  <div>
    <h2>Home</h2>
    <p>Welcome to the home page!</p>
  </div>
</template>

// About.vue
<template>
  <div>
    <h2>About</h2>
    <p>About us</p>
  </div>
</template>

接下来,在组件中使用 <transition> 包裹内容,指定过渡效果的 CSS 类名:

<template>
  <transition name="fade">
    <div>
      <!-- 组件内容 -->
    </div>
  </transition>
</template>

<style>
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.5s;
}

.fade-enter,
.fade-leave-to {
  opacity: 0;
}
</style>

在上述代码中,我们使用了名为 “fade” 的过渡效果类名,并通过 CSS 定义了过渡的动画效果。

最后,在路由配置中为路由添加过渡效果的名称:

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

在上述代码中,当切换到 / 路径时,会加载 Home 组件并应用过渡效果。

5. 导航守卫

Vue Router 提供了导航守卫的功能,可以在路由导航过程中拦截和处理导航操作。通过导航守卫,可以实现在路由切换前后进行数据加载、权限验证、跳转取消等逻辑的处理。

当使用 Vue Router 的导航守卫时,可以通过以下代码案例来演示如何拦截和处理路由导航:

首先,定义导航守卫的回调函数:

const router = new VueRouter({
  routes: [...],
});

router.beforeEach((to, from, next) => {
  // 在路由切换前处理逻辑
  // 可以进行数据加载、权限验证等操作

  next(); // 调用 next() 继续路由导航
});

在上述代码中,beforeEach 是全局前置守卫,在每次路由切换前都会执行该回调函数。其中的 to 参数表示将要导航到的目标路由,from 参数表示当前导航的来源路由。

在回调函数中,可以进行一些逻辑处理,例如数据加载、权限验证等。需要注意的是,如果希望继续路由导航,需要调用 next()

还可以定义全局后置守卫和组件内的守卫:

router.afterEach((to, from) => {
  // 在路由切换后处理逻辑
});

const routes = [
  {
    path: '/user/:id',
    component: User,
    beforeEnter: (to, from, next) => {
      // 在进入路由前处理逻辑
      next(); // 调用 next() 继续路由导航
    }
  }
];

上述代码中的 afterEach 是全局后置守卫,会在每次路由切换后执行。而 beforeEnter 是路由配置中的路由独享守卫,只会在特定的路由进入前执行。

通过定义导航守卫的回调函数,可以实现在路由导航过程中的拦截和处理操作。这样你可以加载数据、验证权限、取消跳转等,来控制路由的行为和逻辑。

6. 路由状态管理

Vue Router 可以与 Vuex(Vue.js 的状态管理库)进行无缝集成,可以在路由导航过程中进行状态管理,实现不同路由之间的数据共享和状态传递。

当使用 Vue Router 与 Vuex 进行集成时,可以通过以下代码案例来演示如何在路由导航过程中进行状态管理:

首先,创建一个 Vuex 的 store,定义需要共享和管理的状态:

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    user: null // 用户信息
  },
  mutations: {
    setUser(state, user) {
      state.user = user;
    }
  }
});

export default store;

在上述代码中,我们创建了一个包含 user 状态的 Vuex store,并定义了一个名为 setUser 的 mutation,用于更新 user 状态的值。

接下来,在路由导航过程中使用 Vuex 进行状态管理,可以在导航守卫的回调函数中调用 Vuex 的 mutation 更新状态:

// main.js
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';

Vue.config.productionTip = false;

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

在上述代码中,我们将 Vuex store 对象传递给 Vue 实例,使其可以在整个应用中访问和使用。

在导航守卫的回调函数中更新 Vuex store 的状态:

router.beforeEach((to, from, next) => {
  // 在路由切换前处理逻辑
  // 可以进行数据加载、权限验证等操作
  const user = // 获取用户信息的逻辑,例如从后端获取用户数据

  store.commit('setUser', user); // 调用 Vuex 的 mutation 更新状态

  next(); // 调用 next() 继续路由导航
});

在上述代码中,我们在导航守卫的回调函数中获取用户信息,并通过调用 Vuex 的 setUser mutation 更新 user 状态。

在其他组件中访问 Vuex store 的状态:

// MyComponent.vue
export default {
  computed: {
    user() {
      return this.$store.state.user; // 访问 Vuex store 的状态
    }
  }
};

在上述代码中,我们使用计算属性 user 来访问 Vuex store 中的 user 状态。

通过上述代码案例,在路由导航过程中可以使用 Vuex 进行状态管理,实现不同路由之间的数据共享和状态传递。这样可以简化应用的数据传递和管理,并提升开发效率。

通过以上功能,Vue Router 提供了一种便捷的方式来管理前端应用程序的路由,使得开发者可以更好地组织和管理应用的不同页面和组件,并实现良好的用户导航体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app:查询对象中字段为可变情况的子项

如上图&#xff0c;数据中aaa为可变项&#xff0c;需要查询其子项name的值 var test aaa var data {"no":1,"aaa": {"name":张三,"age": 20}, } console.log(data[test].name) 定义一个变量test&#xff0c;其值设置为aaa&#xff…

SENet: 强化深度卷积神经网络的自适应特征学习

SENet&#xff08;Squeeze-and-Excitation Network&#xff09;是一种革命性的深度卷积神经网络架构&#xff0c;旨在提高模型对图像特征的建模能力。它引入了自适应特征重新校准机制&#xff0c;通过学习性地调整通道间的重要性&#xff0c;提高了模型的性能&#xff0c;广泛用…

在Windows上 ciphey安装(详细版)

文章目录 前言 一、不想卸载原有的python版本&#xff1f; 二、安装步骤 1.安装python 2.创建虚拟环境vnev 3.在ciphey的虚拟环境中进行激活 4.安装ciphey 三、参数列表 总结 前言 提示&#xff1a;安装了好几次&#xff0c;但是都没安装成功&#xff0c;我使用了三个电脑p…

前后端分离问题 | 协调

CORS error 跨域问题--->找后端 报错&#xff1a;Access to XMLHttpRequest at http://xxx/Info?id5 from origin http://localhost:xxx has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource.

阿里DDD大佬:从0到1,带大家精通DDD

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&#xff1…

【word小技巧】如何在方框中打√

1、新建一个word文档 2、点击“插入”–>“符号”–>“其他符号” 3、字体选择“wingdings 2”&#xff0c;然后就可以看到想要的符号了。选择之后&#xff0c;点击插入 4、完成插入

堆叠大陆Stacklands中文版:激发你的创意与策略,开启全新的建造体验

你是否曾经梦想过成为一个建筑师&#xff0c;创造自己的世界&#xff1f;或者向往那些无尽的策略游戏&#xff0c;在其中规划、建造并统治一切&#xff1f;现在&#xff0c;这个梦想已经触手可及&#xff0c;因为堆叠大陆Stacklands正等待你的探索&#xff01; 堆叠大陆Stackl…

【多线程面试题十六】、谈谈ReentrantLock的实现原理

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;谈谈ReentrantLock的实现…

pytorch:R-CNN的pytorch实现

pytorch&#xff1a;R-CNN的pytorch实现 仅作为学习记录&#xff0c;请谨慎参考&#xff0c;如果错误请评论指出。 参考文献&#xff1a;Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation      https://blog.csdn.net/qq_41694024/cat…

S5PV210裸机(九):ADC

本文主要探讨210的ADC相关知识。 ADC ADC:模数转换&#xff08;模拟信号转数字信号&#xff09; 量程:模拟电压信号范围(210为0&#xff5e;3.3V) 精度:若10二进制位来表示精度&#xff08;210为10位或12位&#xff09;,量…

Umijs项目优化

首先通过npm run analyze 查看打包后的文件进行观察&#xff0c;哪些包的体积大&#xff0c;然后分解开 体积较大的文件:echarts、wangeditor、antd、moment.js package.json 文件配置 .umirc.ts配置文件 1. 分包配置 通过 webpack-chain 的 API 修改 webpack 配置。 chunk…

水果音乐编辑软件 flstudio_mac_21.2.0.3405中文破解版

flstudio_mac_21.2.0.3405中文破解版是Mac系统中的一款水果音乐编辑软件&#xff0c;提供多种插件&#xff0c;包括采样器、合成器和效果器&#xff0c;可编辑不同风格的音乐作品&#xff0c;Pattern/Song双模式&#xff0c;可兼容第三方插件和音效包&#xff0c;为您的创意插上…

.jnlp打开方式

首先配置电脑的java环境。 百度搜索jre下载&#xff0c;会有很多结果&#xff0c;一般选择官网进行下载。 下载正确的jre版本。 我的电脑是windows 64位&#xff0c;根据你自己电脑的情况选择版本进行下载。不懂自己电脑是多少位的可以看下一步。 查看电脑是64位还是32…

halcon roberts、 prewitt_amp、 sobel_amp、 edges_image、 laplace_of_gauss 对比

原图 灰度&#xff1a; roberts 算子&#xff1a; prewitt算子 sobel 算子 canny算子 拉普拉斯 代码&#xff1a; read_image (Image, C:/Users/alber/Desktop/opencv_images/canny.png) rgb1_to_gray (Image, GrayImage)* 测试 roberts 算子 roberts (GrayImage, ImageRoberts…

使用自动编码器进行半监督异常检测

使用自动编码器进行半监督异常检测 前言前提条件相关介绍Semi-supervised Anomaly Detection using AutoEncoders项目结构训练模型测试模型 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入YOLO系列专栏、自…

【NI-DAQmx入门】数字IO基础知识

1.漏端和源端数字IO的区别 漏端和源端是用于定义负载中直流电流控制的术语&#xff0c;分别表示所用到的数字输入和输出的类型。 漏端的数字I / O&#xff08;输入/输出&#xff09;提供与负载的接地连接。源端的数字I / O为负载提供电压源。 以一个由数字输入与数字输出相连…

javaEE -12(12000字CSS入门级教程)

css即层叠样式表 (Cascading Style Sheets). CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离. CSS基本语法规范&#xff1a; 选择器 {一条/N条声明} 选择器决定针对谁修改 (找谁)声明决定修改啥. (干啥)声明的属性是…

Linux-mipi接口

mipi_csi接口 mipi_dsi接口

Qwt QwtPlotBarChart自定义条形统计图

1.概述 QwtPlotBarChart 是 Qt 绘图库 Qwt 中的一个类&#xff0c;用于绘制柱状图。它可以将数据通过柱形的高度来展示&#xff0c;方便比较不同数据量的大小差别。QwtPlotBarChart 类提供了一些方法和属性来设置柱形的样式、颜色、边界等。 以下是类的继承关系图&#xff1a…

oracle (8)Managing Tablespace Data File

Managing Tablespace & Data File &#xff08;维护表空间和数据文件&#xff09; 目标&#xff1a; 定义表空间和数据文件的用途创建表空间管理表空间学会使用甲骨文托管文件(OMF) 创建和管理表空间&#xff08;不是重点&#xff09;获取表空间信息 一、基础知识 1、表…