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的mixin策略
Nov 19 Vue.js
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
vue实现表格合并功能
Dec 01 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 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
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
小程序云开发实战小结
2018/10/25 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
《二泉映月》教学反思
2014/04/15 职场文书
项目经理任命书范本
2014/06/05 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
八年级作文之友谊
2019/12/02 职场文书