前端Vue篇之Vue-Router 的懒加载如何实现、如何定义动态路由?如何获取传过来的动态参数?

目录

  • Vue-Router 的懒加载如何实现
    • 方案一:箭头函数 + import
    • 方案二:箭头函数 + require
    • 方案三:require.ensure 技术
    • 总结
  • 如何定义动态路由?如何获取传过来的动态参数?
    • 定义动态路由
    • 获取传递的动态参数
    • Query方式
      • 定义路由
      • 跳转方法
        • 方法1:
        • 方法2:
        • 方法3:
        • 方法4:
        • 方法5:
        • 获取参数
      • 案例需求
        • 获取传递的动态参数
    • 总结

Vue-Router 的懒加载如何实现

在 Vue Router 中,懒加载可以帮助我们按需加载组件,从而减小初始页面加载时间,提高应用性能。Vue Router 支持使用动态 import 结合 webpack 的代码分割功能来实现懒加载。

下面是几种常见的懒加载实现方式:

方案一:箭头函数 + import

const List = () => import('@/components/list.vue')
const router = new VueRouter({routes: [{ path: '/list', component: List }]
})
  • 优点
    • 语法简洁,直观易懂。
    • 使用箭头函数和动态 import 实现懒加载,符合现代 JavaScript 标准。
  • 缺点
    • 需要构建工具(如 webpack)的支持,以及启用代码分割功能。

方案二:箭头函数 + require

const router = new Router({routes: [{path: '/list',component: resolve => require(['@/components/list'], resolve)}]
})
  • 优点
    • 使用箭头函数和 require 实现懒加载,能够按需加载组件。
    • 在一些旧版本的构建工具中仍然比较常见。
  • 缺点
    • 语法相对复杂,不够直观。
    • 依赖于旧版本的模块加载方式,可能在未来的 JavaScript 标准中被逐渐淘汰。

方案三:require.ensure 技术

const List = r => require.ensure([], () => r(require('@/components/list')), 'list');
const router = new Router({routes: [{path: '/list',component: List,name: 'list'}]
})
  • 优点
    • 可以实现多个路由指定相同的 chunkName,从而合并打包成一个 js 文件,减少了网络请求。
  • 缺点
    • 使用起来相对复杂,不够直观。
    • require.ensure 在 webpack 2 中已经被废弃,推荐使用动态 import 替代。

总结

  • 方案一和方案二都是使用箭头函数结合动态加载的方式,语法相对直观,但是需要构建工具的支持。
  • 方案三在一些特定情况下可以实现多个路由合并打包成一个 js 文件,但语法相对复杂,并且在新版本的 webpack 中已经被废弃。

总体来说,方案一是比较推荐的懒加载方式,它直观易懂,符合现代 JavaScript 标准,并且在大多数现代构建工具中都有很好的支持。

如何定义动态路由?如何获取传过来的动态参数?

定义动态路由

在Vue Router中,动态路由允许我们定义路径时使用占位符,这些占位符将会被实际的数值所替代。举例来说,一个动态路由可以是 /user/:id,其中 :id 就是动态的参数。

const router = new VueRouter({routes: [{ path: '/user/:id', component: User }]
})

在这个例子中,我们定义了一个动态路由 /user/:id,其中 :id 是动态参数,它可以匹配任何值。

获取传递的动态参数

在组件中,可以通过 $route.params 来获取传递过来的动态参数。例如,在 User 组件中,可以这样获取 id 参数:

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

在上述代码中,this.$route.params.id 就是获取到的动态参数 id 的值。你可以在组件的生命周期钩子函数中(如 createdmounted 等)或者方法中访问这个值。

总之,定义动态路由是通过在路由路径中使用占位符来实现的,而获取传递的动态参数则是通过在组件中使用 $route.params 来获取的。

Query方式

另外一种传递参数的方式是使用 Query 参数。这种方式不会改变 URL 中的路由路径,而是在路径后面以 ? 开头加上键值对的方式传递参数。

定义路由

const router = new VueRouter({routes: [{ path: '/user', component: User }]
})

跳转方法

方法1:
<router-link :to="{ name: 'users', query: { uname: 'james' }}">按钮</router-link>
方法2:
this.$router.push({ name: 'users', query:{ uname:'james' }})
方法3:
<router-link :to="{ path: '/user', query: { uname:'james' }}">按钮</router-link>
方法4:
this.$router.push({ path: '/user', query:{ uname:'james' }})
方法5:
this.$router.push('/user?uname=james')
获取参数

通过 $route.query 可以获取传递的值。在 User 组件中,你可以这样获取 Query 参数:

export default {created() {console.log(this.$route.query.uname);}
}

假设我们正在开发一个社交平台,需要显示每个用户的个人资料页面。这时就需要使用动态路由来实现根据不同用户的ID来展示对应的个人资料页面。

案例需求

我们希望能够通过访问 /user/:id 的方式来展示特定用户的个人资料页面,其中 :id 是动态的,可以匹配任何用户ID。

const router = new VueRouter({routes: [{ path: '/user/:id', component: UserProfile }]
})
  1. 在定义路由时,使用 /:id 来表示动态参数。
  2. 创建名为 UserProfile 的组件用于展示用户个人资料。
  3. 当访问 /user/123 时,会渲染 UserProfile 组件,并且可以通过 $route.params.id 获取到传递过来的动态参数。
获取传递的动态参数

在组件中,可以通过 $route.params 来获取传递过来的动态参数。例如,在 UserProfile 组件中,可以这样获取 id 参数:

export default {created() {console.log(this.$route.params.id);// 根据获取到的 id 请求对应用户的数据并进行页面渲染}
}
  • 定义动态路由时,需要使用占位符来表示动态部分,例如 /:id
  • 在组件中,可以通过 $route.params 来获取传递过来的动态参数。

总结

动态路由是Vue Router中非常重要的功能之一,它允许我们根据不同的参数值来展示不同的内容,适用于各种需要根据动态参数展示内容的场景,如个人资料页、商品详情页等。在定义动态路由时,需要注意使用占位符来表示动态部分,并且在组件中可以通过 $route.params 来获取传递过来的动态参数。

持续学习总结记录中,回顾一下上面的内容:
懒加载:在Vue Router中,使用懒加载可以通过import函数和Webpack的代码分割功能来实现。这意味着只有在需要时才会加载相应的组件,而不是一次性加载所有组件。
动态路由:定义动态路由是通过在路径中使用占位符来实现的,比如/user/:id。这样,不同的参数值会匹配到相同的路由,并渲染对应的组件。
获取传递的动态参数:在组件中,可以通过$route.params来获取传递过来的动态参数,例如,在User组件中,可以使用this.$route.params.id来获取传递的ID参数。

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

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

相关文章

数仓实战——京东数据指标体系的构建与实践

目录 一、如何理解指标体系 1.1 指标和指标体系的基本含义 1.2 指标和和标签的区别 1.3 指标体系在数据链路中的位置和作用 1.4 流量指标体系 1.5 指标体系如何向上支撑业务应用 1.6 指标体系背后的数据加工逻辑 二、如何搭建和应用指标体系 2.1 指标体系建设方法—OS…

IDEA中Maven无法下载jar包问题解决

在项目中经常会遇到jar包无法下载的问题&#xff0c;可以根据以下几种方法进行排查。 1. 排查网络连接 网络连接失败&#xff0c;会导致远程访问Maven仓库失败&#xff0c;所以应确保网络连接正常。 2. 排查Maven的配置 Maven配置文件&#xff08;settings.xml&#xff09;…

【C语言基础】:深入理解指针(二)

文章目录 深入理解指针一、指针运算1. 指针 - 整数2. 指针 - 指针3. 指针的关系运算 二、野指针1. 野指针成因2. 如何避免野指针 三、assert断言四、指针的使用和传址调用4.1 strlen的模拟实现4.2 传值调用和传址调用 五、指针与数组5.1 数组名的理解5.2 指针访问数组5.3 一维数…

JeeSite Vue3:前端开发的未来之路

JeeSite Vue3&#xff1a;前端开发的未来之路 随着技术的飞速发展&#xff0c;前端开发技术日新月异。在这个背景下&#xff0c;JeeSite Vue3 作为一个基于 Vue3、Vite、Ant-Design-Vue、TypeScript 和 Vue Vben Admin 的前端框架&#xff0c;引起了广泛关注。它凭借其先进的技…

web小游戏,蜘蛛纸牌

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的订阅后,私信本人,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、贪吃蛇、飞机大战、坦克大战、开心消消乐、扑鱼达人、扫雷、打地鼠、斗地主等等。 <!DOCTYPE h…

Python图像处理【21】基于卷积神经网络增强微光图像

基于卷积神经网络增强微光图像 0. 前言1. MBLLEN 网络架构2. 增强微光图像小结系列链接 0. 前言 在本节中&#xff0c;我们将学习如何基于预训练的深度学习模型执行微光/夜间图像增强。由于难以同时处理包括亮度、对比度、伪影和噪声在内的所有因素&#xff0c;因此微光图像增…

模板15-类模板与友元

全局函数类内实现-直接在类内声明友元即可 全局函数类外实现-需要提前让编译器知道全局函数的存在 #include <iostream> using namespace std; //通过全局函数打印Person的信息//提前让编译器知道Person类存在 template <class T1, class T2> class Person;//类外…

排序——堆排序

本节继续复习排序算法。这次复习排序算法中的堆排序。 堆排序属于选择排序。 目录 什么是堆&#xff1f; 堆排序 堆排序的思想 堆排代码 向下调整算法 堆排整体 什么是堆&#xff1f; 在复习堆排序之前&#xff0c; 首先我们需要回顾一下什么是堆 。 堆的本质其实是一个数…

C语言代码 创建一个整形数组,完成对数组的操作

创建一个整形数组&#xff0c;完成对数组的操作&#xff1a; 实现函数 init() 初始化数组为全0.实现 print() 打印数组的每个元素。实现 reverse() 函数完成数组元素的逆置。 代码示例&#xff1a; #include <stdio.h> void init(int arr[], int sz) {int i 0;for (i…

游戏引擎用什么语言开发上层应用

现在主流的游戏引擎包括&#xff1a; 1、Unity3D&#xff0c;C#语言&#xff0c;优点在于支持几乎所有平台 丹麦创立的一家公司&#xff0c;现已被微软收购。在中国市场占有率最高&#xff0c;也是社群很强大&#xff0c;一般解决方案也能在网上找到&#xff0c;教程丰富。物理…

【C++ 23种设计模式】

C 23种设计模式 ■ 创建型模式(5种)■ 工厂模式■ 抽象工厂模式■ 原型模式■ 单例模式■ 建造者模式 ■ 结构型模式(7种)■ 适配器模式■ 桥接模式■ 组合实体模式■ 装饰器模式■ 外观模式■ 享元模式■ 代理模式 ■ 行为型模式(11种)■ 责任链模式■ 中介者模式■ 策略模式■…

Golang pprof 分析程序的使用内存和执行时间

一、分析程序执行的内存情况 package mainimport ("os""runtime/pprof" )func main() {// ... 你的程序逻辑 ...// 将 HeapProfile 写入文件f, err : os.Create("heap.prof")if err ! nil {panic(err)}defer f.Close()pprof.WriteHeapProfile(f…

139.乐理基础-一四五八度为何用纯?

上一个内容&#xff1a;138.乐理基础-等音、等音程的意义-CSDN博客 上一个内容里练习的答案&#xff1a; 以乐理里写的知识&#xff0c;没办法完全解释透彻 一四五八度为何用纯&#xff1f;这个问题&#xff0c;要透彻的话要从各个文明怎么发现音高、发明音高、制定规则等&…

Vue3+element-plus复杂表单分组处理

一、为什么表单要分组处理&#xff1f; 方便表单字段的复用&#xff1a;例如&#xff0c;你的表单有十个字段会在很多的表单都会用到&#xff0c;那么表单则需要进行分组进行表单复用&#xff1b;实现不同角色的表单权限控制&#xff1a;例如一个表单有60个字段&#xff0c;角…

c# 加载图片到img控件

1、加载函数 private Image LoadPicFromPath(string fileName) { Image img null; if (System.IO.File.Exists(fileName)) { Image img Image.FromFile(fileName); System.IO.MemoryStream mStream new Syste…

VisualStudio 2022的安装

1.IDE 推荐最新版VisualStudio2022&#xff0c;功能十分强大&#xff0c;社区版就够用了。下载地址 2.安装 工作负载选择桌面开发&#xff0c;Web开发可以暂时不选中&#xff08;大部分都用不到&#xff09;。 单个组件选中NET 6.0和NET Frameword4.6.1 也就可以了。 后面安…

14-RPC-自研微服务框架

RPC RPC 框架是分布式领域核心组件&#xff0c;也是微服务的基础。 RPC &#xff08;Remote Procedure Call&#xff09;全称是远程过程调用&#xff0c;相对于本地方法调用&#xff0c;在同一内存空间可以直接通过方法栈实现调用&#xff0c;远程调用则跨了不同的服务终端&a…

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中&#xff0c;零部件的生产是整个制造流程的关键一环。这些零部件&#xff0c;包括但不限于制动系统、转向系统和传动系统&#xff0c;是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求&#xff0c;制造商们纷纷投入到高度…

HTML <script>元素的10个属性

将javascrip插入HTML的主要方法是使用<script>元素&#xff0c;这个元素是网景公司&#xff08;Netscape&#xff09;创造出来的&#xff0c;script 元素所属类型因其用法而异。位于 head 元素中的 script 元素属于元数据元素&#xff0c;位于其他元素&#xff08;如 bod…

Jetpack Compose: Hello Android

Jetpack Compose 是一个现代化的工具包&#xff0c;用于使用声明式方法构建原生 Android UI。在本博文中&#xff0c;我们将深入了解一个基本的 “Hello Android” 示例&#xff0c;以帮助您开始使用 Jetpack Compose。我们将探讨所提供代码片段中使用的函数和注解。 入门 在…