【前端53_Vue】路由 Router:安装、基础使用、动态路由匹配、通配符、嵌套路由、编程导航、高级路由使用:路由守卫、动态路由、路由组件缓存keep-alive、路由懒加载

本文主要是介绍【前端53_Vue】路由 Router:安装、基础使用、动态路由匹配、通配符、嵌套路由、编程导航、高级路由使用:路由守卫、动态路由、路由组件缓存keep-alive、路由懒加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Vue Router
    • 安装
    • 基础使用
    • 动态路由匹配
      • 使用案例
      • 容易出错的地方
    • 通配符
    • 嵌套路由
    • 编程导航
    • 高级:路由守卫
      • 全局路由守卫
      • 单个路由独享的
      • 组件内的守卫
    • 动态路由
    • 路由组件缓存
      • 基本使用
      • activated、deactivated 声明周期
    • 路由懒加载
    • vscode 技巧


Vue Router

安装

官网

在终端中输入 vue add router 即可安装 router 插件

安装过程中会让你选择 Use history mode for router,两者有些差别,具体请参阅这篇博文在这里插入图片描述

安装过程如下:

请添加图片描述


基础使用

在这里插入图片描述


动态路由匹配

我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对 于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中 使用“动态路径参数”(dynamic segment) 来达到这个效果

使用案例

来看一场珍贵无比的实验:

在这里插入图片描述
在这里插入图片描述
整完之后的演示如下,可以观察一下浏览器的地址栏。
请添加图片描述

容易出错的地方

如果我们想获取到参数,我们来尝试一下:

首先用 create 声明周期来获取,发现只能获取第一次的,这是因为组件复用了

请添加图片描述
那么我们怎么办呢?用监听器 watch

但是还会有个问题,watch 刚进路由的时候是不会触发的,怎么办呢?

用带配置的监听器!

 watch: {$route: {immediate: true,handler(newValue, oldValue) {console.log("$router:>>", newValue);},},},

实验如下:

请添加图片描述

通配符

通配符的使用场景可以用在 404

跟上面的用法类似,新建一个 404.vue ,写点东西在里面,然后再 router.js 中配置一下,当然 path 中用 通配符~

这样,如果路由匹配不到其他路由的话,就会走这个了!(这个跟 router 的顺序没关系哈,我这个版本是没关系的)

// router.js
{path: "*",name: "404",component: () => import("../views/404.vue"),
},

在这里插入图片描述

嵌套路由

有如下场景

我点击导航列表,并不是跳到了新的页面,而是在当前页面切换展示

请添加图片描述
那么这时候就用到了嵌套路由了,逻辑大概是这样的:

在这里插入图片描述

整体代码概览:

在这里插入图片描述
总结一下:

  • 如果想做嵌套路由,那么需要有个路由出口(比方说我上面例子里的 Home.vuerouter-view

编程导航

借助 router 的实例方法,可编写代码来实现编程式导航

// 字符串 
router.push('home')
// 对象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: '123' }})
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

下面把上面例子改一下:

在这里插入图片描述
可以看一下演示,跟上面的逻辑没啥区别

请添加图片描述


高级:路由守卫

vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种类型

  • 全局的,
  • 单个路由独享的
  • 组件级的

现在我模拟一个场景,用户要登录!登录之后才能走别的路由

不妨用全局路由试一下

全局路由守卫

router.beforeEach((to, from, next) => {// ...// to: Route: 即将要进入的目标 路由对象// from: Route: 当前导航正要离开的路由// next: Function: 一定要调用该方法来 resolve 这个钩子。
})

在这里插入图片描述
写好之后实验一下:请添加图片描述

单个路由独享的

就是对单个路由做一个路由守卫,比方说如下图所示:

在这里插入图片描述

组件内的守卫

可以在路由组件内直接定义以下路由导航守卫:

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave

下面举个例子


动态路由

通过 router.addRoutes(routes) 的方式动态添加路由

场景:登录成功后,添加对应角色可以访问的的路由页面。

比方说

  • 普通用户可以看 girl 的姓名
  • vip 用户可以看 girl 的相片(姓名和相片是不同的路由)

那么可以通过动态路由来设置,代码思路如下:

handleLogin() {window.isLogin = true;this.$router.addRoutes([{path: "/about",name: "About",component: () =>import(/* webpackChunkName: "about" */ "../views/About.vue"),},]);const redirect = this.$route.query.redirect;this.$router.push(redirect);
},

路由组件缓存

有个组件,它里面的数据不希望老是更新,那我们可以利用keepalive做组件缓存,保留组件状态,提高执行效率

没有缓存的组件如下:

请添加图片描述

缓存后的组件如下:

请添加图片描述

基本使用

// 举例:缓存about组件
<keep-alive include="about,othername"><router-view></router-view>
</keep-alive>

这里的 include 是组件的名字,意思是想让那个组件缓存!

也可以动态绑定,这就需要变成数组,像这样

<keep-alive :include="['about', 'othername']"><router-view></router-view>
</keep-alive>

activated、deactivated 声明周期

这里还会有两个生命周期钩子 activateddeactivated

activated 就是当切换到缓存的组件时,会触发的函数

反之,离开当前的缓存组件,会触发 deactivated


路由懒加载

路由组件的懒加载能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。

() => import("../views/About.vue")

把组件按组分块

() => import(/* webpackChunkName: "group-about" */ "../views/About.vue")

具体的说明在这里:Vue-router 官方懒加载


vscode 技巧

首先选中要包裹的代码,然后command + shift+p跳出命令行,输入wrap 回车,之后输入 Tag 名即可。

这篇关于【前端53_Vue】路由 Router:安装、基础使用、动态路由匹配、通配符、嵌套路由、编程导航、高级路由使用:路由守卫、动态路由、路由组件缓存keep-alive、路由懒加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976061

相关文章

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子