Vue router配置与使用分析讲解


Posted in Vue.js onDecember 24, 2022

说明

  1. 本教程适用于vue3中的路由vue-router@4,的配置及使用
  2. 安装及配置
  3. 路由的基本使用
  4. 动态路由的添加
  5. 路由守卫
  6. 找不到路由配置(path: ‘/:pathMatch(.)’,)

一、安装及配置

安装

npm install vue-router@4

配置

//自己创建的router文件中
import { createRouter, createWebHashHistory } from 'vue-router'
//createWebHashHistory 在访问的时候带有#
//createWebHistory 在访问的时候不带#
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    //...
  ],
})
export default router
//在main.js文件中
import router from 'router_path'
const app = createApp(App)
app.use(router)
app.mount('#app')

二、在html中使用

用 Vue + Vue Router 创建单页应用非常简单:通过 Vue.js,我们已经用组件组成了我们的应用。当加入 Vue Router 时,我们需要做的就是将我们的组件映射到路由上,让 Vue Router 知道在哪里渲染它们。下面是一个基本的例子:

HTML

<script src="https://unpkg.com/vue@3"></script>
<script src="https://unpkg.com/vue-router@4"></script>
<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!--使用 router-link 组件进行导航 -->
    <!--通过传递 `to` 来指定链接 -->
    <!--`<router-link>` 将呈现一个带有正确 `href` 属性的 `<a>` 标签-->
    <router-link to="/">Go to Home</router-link>
    <router-link to="/about">Go to About</router-link>
  </p>
  <!-- 路由出口 -->
  <!-- 路由匹配到的组件将渲染在这里 -->
  <router-view></router-view>
</div>

router-link

请注意,我们没有使用常规的 a 标签,而是使用一个自定义组件 router-link 来创建链接。这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。我们将在后面看到如何从这些功能中获益。

router-view

router-view 将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局。

三、路由的基本使用

路由基本元素有name、path、component、meta(字典)几个要素

  • name路由名
  • path路由路径
  • component组件名(组件的路径及组件名)
  • meta路由元信息
import { createRouter, createWebHashHistory } from 'vue-router'
import Login from '@/views/Login.vue'
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: '/',
      name: 'login',
      meta:{
        title:'登录',
      },
      component: Login
    },
})
export default router

带参数的路由匹配

很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数 :

const User = {
  template: '<div>User</div>',
}
// 这些都会传递给 `createRouter`
const routes = [
  // 动态字段以冒号开始
  { path: '/users/:id', component: User },
]

现在像 /users/johnny 和 /users/jolyne 这样的 URL 都会映射到同一个路由。

路径参数 用冒号 : 表示。当一个路由被匹配时,它的 params 的值将在每个组件中以 this.$route.params 的形式暴露出来。因此,我们可以通过更新 User 的模板来呈现当前的用户 ID:

const User = {
  template: '<div>User {{ $route.params.id }}</div>',
}

你可以在同一个路由中设置有多个 路径参数,它们会映射到 $route.params 上的相应字段。例如:

匹配模式 匹配路径 route.params
/users/:username /users/eduardo { username: ‘eduardo’ }
/users/:username/posts/:postId /users/eduardo/posts/123 { username: ‘eduardo’, postId: ‘123’ }

除了 r o u t e . p a r a m s 之外, route.params 之外, route.params之外,route 对象还公开了其他有用的信息,如 r o u t e . q u e r y (如果 U R L 中存在参数)、 route.query(如果 URL 中存在参数)、 route.query(如果URL中存在参数)、route.hash 等。你可以在 API 参考中查看完整的细节。

四、动态路由的添加

路由守卫

找不到路由配置

常规参数只匹配 url 片段之间的字符,用 / 分隔。如果我们想匹配任意路径,我们可以使用自定义的 路径参数 正则表达式,在 路径参数 后面的括号中加入 正则表达式 :

const routes = [
  // 将匹配所有内容并将其放在 `$route.params.pathMatch` 下
  { path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFound },
  // 将匹配以 `/user-` 开头的所有内容,并将其放在 `$route.params.afterUser` 下
  { path: '/user-:afterUser(.*)', component: UserGeneric },
]

在这个特定的场景中,我们在括号之间使用了自定义正则表达式,并将pathMatch 参数标记为可选可重复。这样做是为了让我们在需要的时候,可以通过将 path 拆分成一个数组,直接导航到路由:

this.$router.push({
  name: 'NotFound',
  // 保留当前路径并删除第一个字符,以避免目标 URL 以 `//` 开头。
  params: { pathMatch: this.$route.path.substring(1).split('/') },
  // 保留现有的查询和 hash 值,如果有的话
  query: this.$route.query,
  hash: this.$route.hash,
})

到此这篇关于Vue router配置与使用分析讲解的文章就介绍到这了,更多相关Vue router配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
vue单元格多列合并的实现
Nov 26 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
Vue实现省市区三级联动
Dec 27 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
vue实现简易音乐播放器
Aug 14 #Vue.js
Vue3实现简易音乐播放器组件
Aug 14 #Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 #Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 #Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 #Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 #Vue.js
Vue深入理解插槽slot的使用
Aug 05 #Vue.js
You might like
怎么使 Mysql 数据同步
2006/10/09 PHP
一个显示天气预报的程序
2006/10/09 PHP
ajax缓存问题解决途径
2006/12/06 PHP
PHP读取目录下所有文件的代码
2008/01/07 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
Python对象体系深入分析
2014/10/28 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
Python中的With语句的使用及原理
2020/07/29 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
幼儿园庆六一活动方案
2014/03/06 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
勤俭节约主题班会
2015/08/13 职场文书
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
tree shaking对打包体积优化及作用
2022/07/07 Java/Android