Vue Router中Matcher的初始化流程

Vue Router的Matcher是用来匹配路径与路由配置的。该匹配器会在Vue Router的实例化过程中被初始化。Matcher的初始化流程如下:

  1. 创建空的路由映射表

在Vue Router实例化时,会创建一个空的路由映射表,用于存储路径与路由配置之间的映射关系。该映射表是一个由路径作为键,路由配置作为值的对象。

示例:

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

const router = new VueRouter({
  routes,
})

在这个示例中,Vue Router会初始化一个空的路由映射表,并将传入的路由配置数组routes添加到映射表中。

  1. 遍历路由配置,将每个配置项添加到路由映射表中

Vue Router会遍历配置数组routes,将其中的每个路由配置项都添加到路由映射表中。在添加路由配置时,Vue Router会将路径转化为正则表达式,并将其作为键添加到映射表中。

示例:

对于路由配置数组:

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

Vue Router会将/home/about/:id转化为正则表达式,并将其作为键添加到路由映射表中:

{
  '/home': { path: '/home', component: Home },
  '/about/:id': { path: '/about/:id', component: About }
}

其中,/about/:id的正则表达式为/^\/about\/([^\/]+?)\/?$/i,用于匹配路径中的:id参数。

  1. 初始化路由记录

在Vue Router的Matcher中,每一个路径都会对应一条路由记录。每个路由记录包含了路径、处理该路径的路由配置和该路由配置的级别等信息。

示例:

对于路由配置数组:

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

Vue Router会为每个路由配置生成一个路由记录。以/home为例,生成的路由记录如下:

js
{
path: '/home',
components: { default: Home },
instances: {},
name: null,
parent: undefined,
matchAs: '/',
redirect: undefined,
beforeEnter: undefined,
meta: {}
}

其中,path表示路径,components表示需要渲染的组件,instances表示渲染出的组件实例对象,matchAs为匹配路径的别名(当alias存在时),meta为路由元数据,包含路由信息等。

  1. 根据路由记录的优先级生成路由匹配数组

Vue Router的Matcher根据路由配置的添加顺序生成路由匹配数组,并根据路由的优先级调整数组顺序。最终生成的匹配数组会作为Matcher的内部属性。

示例:

对于路由配置数组:

const routes = [
  { path: '/home', component: Home },
  { path: '/about/:id', component: About },
  { path: '*', component: NotFound },
]

Vue Router会在Matcher中生成路由匹配数组:

[
  {
    path: '/about/:id',
    components: { default: About },
    instances: {},
    name: null,
    parent: undefined,
    matchAs: '/',
    redirect: undefined,
    beforeEnter: undefined,
    meta: {},
    regex: /^\/about\/([^\/]+?)\/?$/i,
    score: 500,
    keys: [{ name: 'id', prefix: '/', delimiter: '/', optional: false, repeat: false, pattern: '[^\\/]+?' }]
  },
  {
    path: '/home',
    components: { default: Home },
    instances: {},
    name: null,
    parent: undefined,
    matchAs: '/',
    redirect: undefined,
    beforeEnter: undefined,
    meta: {},
    regex: /^\/home\/?$/i,
    score: 1000,
    keys: []
  },
  {
    path: '*',
    components: { default: NotFound },
    instances: {},
    name: null,
    parent: undefined,
    matchAs: '/',
    redirect: undefined,
    beforeEnter: undefined,
    meta: {},
    regex: /^(.*)$/i,
    score: 0,
    keys: []
  }
]

其中,路由匹配数组每一项都是一个路由记录,包含了路径、路由配置、正则表达式等信息。Matcher会根据路由优先级调整路由匹配数组的顺序,优先级高的路由配置会先被匹配。

综上所述,Vue Router中Matcher的初始化流程包括创建空的路由映射表、遍历路由配置,将每个路由配置添加到路由映射表中、初始化路由记录和根据路由记录的优先级生成路由匹配数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue Router中Matcher的初始化流程 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript数组操作总结

    JavaScript数组操作总结 什么是JavaScript数组 JavaScript数组是一种可以存储一组有序数据的容器,它可以存储任何类型的数据并可以通过索引来访问。在JavaScript中创建一个数组非常简单,只需要使用方括号[]将数据项封装起来,每个数据项之间使用逗号分隔。 let arr = [1, ‘hello’, true, 3.14]; 数组…

    JavaScript 2023年5月17日
    00
  • JS开发自己的类库实例分析

    JS开发自己的类库需要经过以下步骤: 步骤一:确定类库的功能 在开发类库之前,需要确定我们想要实现的功能。这些功能需要与当前市场上主流的类库有一定的区别,也可以是现有类库中不足之处的补充。例如,可以考虑开发一个支持异步请求的类库,或者是在表单验证方面做出针对性的改进。 步骤二:编写代码 确定了功能之后,就可以开始编写代码了。在编写代码的过程中,需要注意以下几…

    JavaScript 2023年5月28日
    00
  • 原生javascript实现DIV拖拽并计算重复面积

    对于如何使用原生JavaScript实现DIV拖拽并计算重叠面积,我们可以采用以下步骤: 步骤一:HTML布局 首先,在HTML中需要定义两个DIV,分别代表我们要移动的两个矩形。 <div id="rect1" class="rectangle"></div> <div id=&quot…

    JavaScript 2023年6月10日
    00
  • JavaScript中?. 和??分别是什么详解

    让我来详细讲解JavaScript中?.和??的使用。 ?.运算符 ?.运算符是ES2020(也称为ES11)中的新功能,它是用于简化可选链式调用的一种语法糖。可选链式调用允许我们选择性地访问一个对象的属性,它避免了访问未定义的对象属性时出现的TypeError错误。 示例1: const user = { name: ‘Tom’, age: 25, add…

    JavaScript 2023年5月18日
    00
  • JavaScript懒加载详解

    JavaScript懒加载是一种优化网站性能的技术,它可以在浏览器显示可见内容之后再延迟加载未显示内容,从而加快页面加载速度。下面将为你详细讲解JavaScript懒加载的完整攻略。 什么是JavaScript懒加载 JavaScript懒加载是指在页面加载时,将页面上的图片、视频、音频等资源暂时不加载,当用户滚动页面时再根据用户的可视范围加载相应的内容。这…

    JavaScript 2023年6月11日
    00
  • JavaScript对JSON数据进行排序和搜索

    下面是关于JavaScript对JSON数据进行排序和搜索的完整攻略: 排序 要对JSON数据进行排序,可以先将其转换为数组,然后使用sort()方法进行排序。以下是具体的步骤: 将JSON数据解析为JavaScript对象。 let data = ‘{"name": "Alice", "age":…

    JavaScript 2023年5月27日
    00
  • 浅谈js的ajax的异步和同步请求的问题

    浅谈JS的Ajax的异步和同步请求的问题 什么是Ajax? 在Web开发中,Ajax是一种在不重新加载整个页面的情况下与服务器交换数据的技术。它使页面可以异步地(意味着不重新加载整个网页)更新并显示某一部分内容。 异步请求和同步请求的区别 在Ajax中,请求有两种方式,异步和同步。 异步请求: 异步请求意味着当请求被发送后,页面可以在等待服务器响应的同时进行…

    JavaScript 2023年6月11日
    00
  • JavaScript前后端JSON使用方法教程

    以下是”JavaScript前后端JSON使用方法教程”的完整攻略: 前言 在Web开发中,JSON是一个重要的数据交换格式。在JavaScript中,我们经常需要使用JSON来进行数据解析、数据交换、以及与后端交互等操作。因此,本篇文章主要介绍了JavaScript前后端JSON使用方法。 JavaScript读取JSON数据 JavaScript提供了p…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部