简单整理vue-router,路由知识

1.项目中引入

1.1 安装注册

在这里插入图片描述

1.2 封装抽离

在main.js中 书写,会造成单个js文件过于臃肿的情况,需要将路由配置部分抽离出来,在src下新建router文件夹,新建index.js文件

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'
import myMap from '../views/mymap.vue'


Vue.use(VueRouter)

const routes = [
  {
    path: '/',//路由重定向
    name: 'home',
    component: HomeView
  },
  {
    path: '/mymap',
    name: 'myMap',
    component: myMap
  },
]
const router = new VueRouter({
  //mode: 'history' //不写就是默认哈希模式,写了就是历史模式
  base: '/test/', //nginx部署时需要的配置项
  routes
})

export default router

通过export default 将router实例导出,再带入到main.js中
在这里插入图片描述

1.3 路由懒加载

其中可以采用路由懒加载的写法去加载页面,提高页面初始化速度

  {
    path: '/about',
    name: 'about',
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  },
  • component 是路由配置中的一个字段,用于指定当前路由的组件。
  • () => import(‘path/to/component’) 是 ES6 中的箭头函数语法,用于定义一个动态导入,意味着在需要时才会加载对应的组件。
  • /* webpackChunkName: “about” */ 是 webpack 的注释语法,用于为动态导入的文件指定一个 chunk 名称,以便在构建时生成对应的代码块。
  • ‘…/views/AboutView.vue’ 是要动态导入的组件的路径。

2. 路由层级

项目中的路由层级基本不会超过三级,以一个demo示例

const router = new VueRouter({
  routes: [
    {
      path: '/',
      component: MainLayout,
      children: [
        {
          path: '',
          component: Home
        },
        {
          path: 'about',
          component: About
        },
        {
          path: 'products',
          component: Products,
          children: [
            {
              path: 'detail/:id',
              component: ProductDetail
            }
          ]
        }
      ]
    },
    {
      path: '/login',
      component: Login
    }
  ]
})

3.路由跳转/传参

3.1 声明式导航

在这里插入图片描述

//跳转到配置的路径为'/index'的页面
<router-link to="/index">点我跳转</router-link>
3.1.1query参数传递
//A页面查询参数传递
<router-link to="/index?words=123">点我跳转</router-link>

//B页面接收参数
console.log(this.$route.query.words, 'message')//打印结果123 message
//动态传递query参数,A页面
<router-link :to="{name:'weChat',query:{message:message}}">去聊天室</router-link>

//接收数据,B页面
console.log(this.$route.query.message, 'message')
3.1.2 params参数传递
//A页面传参
<router-link :to="{name:'weChat',params:{message:message}}">去聊天室</router-link>

//B页面接收参数
console.log(this.$route.params.message, 'message')

3.2 编程式导航

3.2.1 根据path传参传递query数据
//A页面传参
   todoSomething () {
      this.$router.push({
        path: '/weChat',
        query: {
          id: this.message
        }
      })
    }
//B页面接收
 console.log(this.$route.query.id, 'message')
3.2.2 根据path传参传递params数据(不推荐)

在实际使用中,通过 path 传递参数时,并不能直接在目标页面的组件中通过 $route.params 获取到参数值,因为 path 传递参数是基于路由配置中动态参数的匹配,而非通过 params 属性传递参数。

//路由配置
{
    path: '/weChat/:id',
    name: 'weChat',
    component: weChat
  }
//A页面传参

   todoSomething () {
   	  const id = this.message
      this.$router.push({
        path: `/weChat/${id}`,
      })
    }
//B页面接收
 console.log(this.$route.params.id, 'message')
3.2.3 根据name传参传递query数据
//A页面传参
 todoSomething () {
      this.$router.push({
        name: 'weChat',
        query: {
          id: this.message
        }
      })
    }
    //B页面接收
 console.log(this.$route.query.id, 'message')
3.2.4 根据name传参传递params数据
//A页面传参
   todoSomething () {
      this.$router.push({
        name: 'weChat',
        params: {
          id: this.message
        }
      })
    }
//B页面接收
 console.log(this.$route.params.id, 'message')

4. router与route

$router 对象:代表 Vue Router 实例,可以用来导航到不同的路由。
我们可以通过$router.push()$router.replace()、$router.go() 等方法来控制路由跳转。
通常在组件内部通过 this.$router 来访问该对象。

$route 对象:代表当前活跃的路由对象,可以用来访问当前路由的信息。例如当前路径、参数、查询参数等。
我们可以通过 $route.path、$route.params、$route.query 等属性来获取当前路由的信息。
通常在组件内部通过 this.$route 来访问该对象。

5.动态添加路由

// 定义要添加的路由
const newRoute = {
  path: '/new-route',
  component: () => import('./components/NewRoute.vue')
}

// 在 Vue Router 中添加新路由
router.addRoute(newRoute)

6.路由导航守卫

在 Vue Router 中,一共有三种类型的导航守卫:
1.全局前置守卫(beforeEach):在路由切换之前调用,可以用来进行全局权限验证等操作。
2.全局解析守卫(beforeResolve):在路由被解析之后,组件被激活之前调用,可以用来做一些全局的前置操作。
3.全局后置守卫(afterEach):在路由切换完成之后调用,可以用来执行一些后续操作,如页面统计等。

router.beforeEach((to, from, next) => {
  // 在这里进行权限验证等操作
  if (判断) {
    next('/login')
  } else {
    next()
  }
})

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:dense vector 数据类型及标量量化

密集向量&#xff08;dense_vector&#xff09;字段类型存储数值的密集向量。 密集向量场主要用于 k 最近邻 (kNN) 搜索。 dense_vector 类型不支持聚合或排序。 默认情况下&#xff0c;你可以基于 element_type 添加一个 dend_vector 字段作为 float 数值数组&#xff1a; …

【中间件】docker的安装

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 .卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \doc…

Web自动化测试学习方向(Selenium)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

chrome插件webRequest拦截请求并获取post请求体requestBody数据raw内容,解决中文乱码问题

详细使用说明可以看官方文档&#xff1a;https://developer.chrome.com/docs/extensions/reference/api/webRequest?hlzh-cn 拦截操作 想要通过浏览器插件拦截请求的话&#xff0c;需要在manifest.json里面添加webRequet权限&#xff1a; 拦截请求代码放在background.js里面…

Web服务器

Web服务器 1. 阻塞/非阻塞、同步/异步(网络IO)2. Unix/Linux 上的五种IO模型2.1 阻塞 blocking2.2 非阻塞 non-blocking &#xff08;NIO&#xff09;2.3 IO复用&#xff08;IO multiplexing&#xff09;2.4 信号驱动&#xff08;signal-driven&#xff09;2.5 异步&#xff08…

【项目实践04】【RocketMQ消息收发拦截器】

文章目录 一、前言二、项目背景三、实现方案1. 关键接口2. 消息发送方3. 消息消费方4. 配置引入类5. 使用示例 四、思路扩展1. 消费流程简介 一、前言 本系列用来记录一些在实际项目中的小东西&#xff0c;并记录在过程中想到一些小东西&#xff0c;因为是随笔记录&#xff0c…

【Web】浅聊JDBC的SPI机制是怎么实现的——DriverManager

目录 前言 分析 前言 【Web】浅浅地聊JDBC java.sql.Driver的SPI后门-CSDN博客 上篇文章我们做到了知其然&#xff0c;知道了JDBC有SPI机制&#xff0c;并且可以利用其Driver后门 这篇文章希望可以做到知其所以然&#xff0c;对JDBC的SPI机制的来源做到心里有数 分析 先是…

如何实现数据中心布线变更管理?

前言 随着科技的不断发展&#xff0c;数据中心作为企业的核心基础设施之一&#xff0c;承载着大量重要的业务数据。在数据中心运维过程中&#xff0c;变更管理流程变得尤为重要&#xff0c;它是确保数据中心基础设施稳定运行和保障数据安全的关键环节。变更管理的定义是指在维…

电商效果图云渲染优势是什么?

电商效果图云渲染指的是利用云计算技术&#xff0c;将电商所需的效果图渲染任务转移至云服务器进行处理。这些云服务器凭借其卓越的计算能力与庞大的存储空间&#xff0c;能够迅速完成复杂的渲染任务&#xff0c;从而释放本地电脑资源&#xff0c;提升工作效率。 电商效果图云…

常见四种限流算法详解(附:javaDemo)

限流简介 现代互联网很多业务场景&#xff0c;比如秒杀、下单、查询商品详情&#xff0c;最大特点就是高并发&#xff0c;而往往我们的系统不能承受这么大的流量&#xff0c;继而产生了很多的应对措施&#xff1a;CDN、消息队列、多级缓存、异地多活。 但是无论如何优化&…

今日学习总结2024.3.2

最近的学习状态比较好&#xff0c;感觉非常享受知识进入脑子的过程&#xff0c;有点上头。 实验室一个星期唯一一天的假期周六&#xff0c;也就是今天&#xff0c;也完全不想放假出去玩啊&#xff0c;在实验室泡了一天。 很后悔之前胆小&#xff0c;没有提前投简历找实习&…

基于毕奥-萨伐尔定律的交流电机的4极旋转磁场matlab模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于毕奥-萨伐尔定律的交流电机的4极旋转磁场&#xff0c;对比不同定子半径&#xff0c;对比2级旋转磁场。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a…

UE5数字孪生系列笔记(一)

智慧城市数字孪生系统 虚幻引擎连接数据库 将自己的mysql版本的libmysql.dll替换掉插件里面的libmysql.dll 然后将这个插件目录复制到虚幻项目目录下 然后添加这个插件即可 新建一个UMG&#xff0c;添加一个按钮试试&#xff0c;数据库是否连接 将UI添加到视口 打印是否连接…

ChaosBlade故障注入工具--cpu,内存,磁盘占用\IO,网络注入等

前言&#xff1a; 本文介绍一款开源的故障注入工具chaosblade&#xff0c;该工具原本由阿里研发&#xff0c;现已开源&#xff1b;工具特点&#xff1a;功能强大&#xff0c;使用简单。 该工具故障注入包含&#xff1a;cpu&#xff0c;内存&#xff0c;磁盘io&#xff0c;磁盘…

第一讲 计算机组成与结构(初稿)

计算机组成与结构 计算机指令常见CPU寄存器类型有哪些&#xff1f;存储器分类&#xff1f;内存&#xff1f;存储器基本组成&#xff1a; 控制器的基本组成主机完成指令的过程以取数指令为例以存数指令为例ax^2bxc程序的运行过程 机器字长存储容量小试牛刀&#xff08;答案及解析…

Chapter20-Ideal gases-CIE课本要点摘录、总结(编辑中)

20.1 Particles of a gas Brownian motion Fast modules 速率的数值大概了解下&#xff1a; average speed of the molecules:400m/s speed of sound:approximately 330m/s at STP&#xff08;standard temperature and pressure&#xff09; Standard Temperature and Pres…

【论文阅读】(2024.03.05-2024.03.15)论文阅读简单记录和汇总

(2024.03.05-2024.03.15)论文阅读简单记录和汇总 2024/03/05&#xff1a;随便简单写写&#xff0c;以后不会把太详细的记录在CSDN&#xff0c;有道的Markdown又感觉不好用。 目录 &#xff08;ICMM 2024&#xff09;Quality Scalable Video Coding Based on Neural Represent…

JAVA开发第一个Springboot WebApi项目

一、创建项目 1、用IDEA新建一个SpringBoot项目 注意JDK与Java版本的匹配,如果想选择jdk低版本,先要更改服务器URL:start.aliyun.com 2、添加依赖 (1)、Lombok (2)、Spring Web (3)、Mybatis Framework (4)、MySqlDriver 项目中的配置 pom.xml 如下 <?…

Jellyfin影音站点搭建并结合内网穿透实现远程观看本地影视资源

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

LeetCode每日一题之 快乐数

目录 题目介绍&#xff1a; 算法原理&#xff1a; 鸽巢原理&#xff1a; 如何找到环里元素&#xff1a; 代码实现&#xff1a; 题目介绍&#xff1a; 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 我先简单举两个例子&#xff…