写在前面

Vue Router是Vue团队的研发的一款与Vue.js核心深度集成的一款路由插件,使Vue构建单页面程序变得非常的简单;Vue Router目前最新版本是4.X,也是Vue3推荐使用的版本,这篇文章我们就来学习一下Vue Router4.X。

URL.hash与History

Vue Router中存在两种history(记录历史路由),分别是URL.hash和HTML5中提供的History两种。

hash历史记录对于没有主机的Web应用程序(例如file://),或当配置服务器不能处理任意的URL时非常有用,但是hash的SEO非常差劲;

History历史是HTML5中新增的,对于IE来说不是很友好,但是Vue3都放弃IE了,你也就不用考虑IE了;这种方式是目前最常见的一种方式,但是应用程序必须通过http协议被提供服务。

安装与使用流程

首先我们安装Vue Router,命令如下:

npm i vue-router

然后在main.js中写入如下代码:

import { createApp } from 'vue'
import App from './App.vue'
// 1 引入 createRouter
import { createRouter, createWebHistory } from 'vue-router'
// 2 定义路由映射表
const routes = [
  /* more router */
]
// 3 创建路由实例,并传递对应配置
const router = createRouter({
  // history 模式 这里使用createWebHistory
  history: createWebHistory(),
  // 传递路由映射表
  routes
})
createApp(App).use(router).mount('#app')

上面的代码中的routes如果多的话,可以定义一个router.js文件,将其进行抽离,示例代码如下:

router.js

export default [
  /* more router */
]

main.js

import { createApp } from 'vue'
import App from './App.vue'
// 2 引入路由映射表
import routes from './router'

// 1 引入 createRouter
import { createRouter, createWebHistory } from 'vue-router'
// 3 创建路由实例,并传递对应配置
const router = createRouter({
  // history 模式 这里使用createWebHistory
  history: createWebHistory(),
  // 传递路由映射表
  routes
})
createApp(App).use(router).mount('#app')

或者**直接在****router.js中直接导出一个路由实例,在main.js**中使用即可(这种方式更常用)。

router-link和router-view

router-link

<router-link>是Vue提供的自定义组件,用于创建链接,在Vue中并没有使用原生的<a>,因为<a>改变URL后会重新加载页面而<router-link>不会;关于<router-link>组件的细节支持哪些属性,可以参考文档。

router-view

<router-view>组件用于与URL对应的组件,例如下面这段代码:

<template>
  <router-link to="/hello"
    ><img alt="Vue logo" src="./assets/logo.png"
  /></router-link>
  <router-view></router-view>
</template>

然后我们的router.js的代码如下:

import RootComponent from './components/root.vue'
export default [
  {
    path: '/',
    // 引入组件
    component: RootComponent
  },
  {
    path: '/hello',
    // 路由懒加载引入组件
    component: () => import('./components/HelloWorld.vue')
  }
]

关于其他配置项,可以参考文档。

代码运行结果如下所示:

路由懒加载

当我们的应用越来越大时,打包后的JavaScript代码也会特别的大,这个时候需要我们将整个应用拆分为不同的块,而Vue Router就支持这个功能,我们只需要使用动态导入替换静态导入即可,就比如上面那段代码:

component: () => import('./components/HelloWorld.vue')

然后打包(webpack、Vite)工具就会将这些动态导入的组件单独打包,如下图所示:

动态路由

VueRouter允许我们动态的去设置路由匹配规则,例如我们现在有一个User组件,组件的内容会根据不同的ID展示不同的内容,设置方法只需要通过:参数名的形式去设置即可。

例如:

{
  path: '/user/:id',
  component: () => import('@/components/User')
}

在模板中跳转如下:

<router-link to="/user/10010"></router-link>

或者通过useRouter这个hook提供的push方法,例如:

import { useRouter } from 'vue-router'
const {push} = useRouter()
push({
  path: '/user',
  params: { id: 10010 }
})
// 或者
let id = 10010
push('/user/'   id)

获取路由地址可以通过useRoute这个hook,用法与useRouter一致。

匹配所有路由

VueRouter的动态路由允许我们匹配哪些没有匹配到的路由,示例代码如下:

{
  path: '/:pathMatch(.*)',
  component: () => import('./components/Page404.vue'),
},

当前面的路由匹配未成功时,就会匹配这个路由。

路由嵌套

现在我们有一个需求,就是在HelloWorld组件下存两个组件,需要切换着两个组件。

这个时候路由嵌套的就发挥作用了,其实路由嵌套比较简单,就是通过路由配置中的一个children属性来实现,示例代码如下:

HelloWorld.vue

<template>
  <h1>Hello World</h1>
  <div
    style="
      display: flex;
      justify-content: space-between;
      width: 240px;
      margin: 0 auto;
    "
  >
    <router-link to="about">about</router-link>
    <router-link to="user">user</router-link>
  </div>
  <router-view></router-view>
</template>

router.js

{
  path: '/hello',
  // 路由懒加载引入组件
  component: () => import('./components/HelloWorld.vue'),
  children: [
    {
      path: 'about',
      component: () => import('./components/about.vue'),
    },
    {
      path: 'user',
      component: () => import('./components/user.vue'),
    },
  ],
},

子组件比较简单,只有一个<h1>标签,最终效果如下:

写在最后

到此这篇关于10分钟快速上手VueRouter4.x教程的文章就介绍到这了,更多相关VueRouter4.x入门内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

10分钟快速上手VueRouter4.x教程的更多相关文章

  1. JSP开发入门(五)--JSP其他相关资源

    JSP其他相关资源:ServletsandJavaServerPages(JSP)1.0:ATutorialhttp://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/JavaServerPagesTM:ADeveloper'sPerspectivehttp://developer.java.sun.com/developer/technicalArtic

  2.  typeScript入门基础介绍

    这篇文章主要介绍了 typeScript入门基础,TypeScript 是由微软开发的开源、跨平台的编程语言,是 javaScript 的超集,最终被编译为 javaScript代码。常常被简称为TS支持JS、ES语法,下文将继续其他基础介绍,需要的朋友可以参考一下

  3. Reactive Programming入门概念详解

    这篇文章主要为大家介绍了Reactive Programming入门概念详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. JSP入门教程(1)

    现在Sun公司并不会因你使用JSP向你收费,况且用于Solaris、Linux以及Windows系统的组件都很容易获得。Web服务器自动将通过JSP生成的Java代码片段转换成Java片段。JSP也可自动控制许多功能,如过去用Perl脚本编写功能程序或像ASP这样的服务器专用API。JSP基本语法讲完安装问题后,现在进入来讨论JSP语法。共有五种JSP指令和脚本元素。在更新的JSP1.1规范出台后,就有了与XML兼容的版本。“Taglib”指令不在讨论之列,但是在用JSP1.1创建自定义标记可以使用它。

  5. JSP开发入门(一)--安装好你的机器来使用JSP

    JSP开发入门(一)----安装好你的机器来使用JSP你将会需要Java2软件开发工具,它原来的名称是Java发展工具以及JavaServer网站发展工具,Tomcat,或是其它支持JSP的网络服务器。Sun免费提供JSDK与JSWDK来供Windows,Solaris,以及Linux平台使用。下载与安装你需要的组件目前发布的1.2.2-001,JSDK可下载的版本是以可安装的压缩形式。下载的文件大约是20MB,可提供完整的Java发展环境,让你能建立利用标准API为核心的Java解决之道。然而,你的网络

  6. JavaScript web网页入门级开发详解

    Web框架正如前文所述, 在整个项目结构中处于一个承上启下的位置, 是整个项目的核心组件, 所以这次来聊聊Web框架的一些普适性特性和如何快速的入门

  7. 初学者入门:细述PHP4的核心Zend

    在一些特殊测试环境下,Zend的执行速度比PHP3及ASP快了几倍到几百倍之多,这也意味着网站的后端CGI界面的统一者非PHP4Zend莫属了。以这种潜力发展下去,VBA的终结者非Zend莫属。而微软只全力对付Linux,没有注意到来自PHP/Zend的威胁。Web服务器发觉是PHP的要求,需要PHP引擎解析,于是将它送到PHP4的Zend引擎上。而目前在网络上的流行,也为Zend引擎作了最佳的见证。在Zend的四大产品中,这是目前唯一成熟的产品。届时,可能会有PHP大战Java的情形。

  8. Javascript 基础---Ajax入门必看

    下面小编就为大家带来一篇Javascript 基础---Ajax入门必看。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. JDBCTM 指南:入门5 - ResultSet

    JavaSoft目前正在准备这本书。ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。在ResultSet对象或其父辈Statement对象关闭之前,光标一直保持有效。关于ResultSet中列的信息,可通过调用方法ResultSet.getMetaData得到。返回的ResultSetMetaData对象将给出其ResultSet对象各列的编号、类型和属性。getString的返回值将为JavaString对象。TIYITSMALLITITEGERBIGNTRE

  10. ECMAScript6入门教程

    本文详细讲解了ECMAScript6的基础教程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部