vue-router4 出现 No match found for location with path "/"

#### router/index.ts文件
import { createRouter, RouteRecordRaw, createWebHashHistory } from 'vue-router'
const routes: Array<RouteRecordRaw> = [
{
path: '/',
name: 'home', //这里的name
component:()=>import('../pages/test/test.vue')
},
{
path: '/home',
name: 'home', //这里的name
component:()=>import('../pages/home/home.vue')
},
]
const router = createRouter({
history:createWebHashHistory(), //哈希值模式
routes
})
// 暴露出去
export default router

出现问题的原因

在控制台出现,找不对应的路径 No match found for location with path "/"
在浏览器上出现空白页面。
是因为你的路由 name字段重复导致的。

vue-router中的name有什么作用呢?

1.路由中的name应该是唯一值,不应该重复。
router-link 中的to属性通过name的值可以进行路由跳转 <template>
<router-link :to="{name:'home'}">去测试页面</router-link>
<router-view></router-view>
</template> const routes: Array<RouteRecordRaw> = [
{
path: '/home',
name: 'home', //这个name应该是唯一值
component:()=>import('../pages/home/home.vue')
},
]

a标签的跳转与 router-link 的区别

a标签通过 <a href="/home">进行跳转的时候。
整个页面会重新刷新(左上角的圈圈会刷新),页面会闪一下
router-link 进行跳转的时候整个页面不会重新刷新 [页面不会闪一下]

跳转的时候不保留当前页面的历史记录 router.replace

就是说A页面跳转到B页面的时候。
不保留A页面的历史记录。我们可以通过router.replace('/b')

query 传递参数和接受参数

let paramsinfo = {
name: 'zs',
age:13
}
const gotosPage = () => {
router.push({
path: '/home',
query: paramsinfo
})
}
query传递参数的时候是只能够是一个对象。
query传递参数的时候在地址栏会自动给你使用"?和&链接" 接受参数的时候通过 route.query.xxx

parmas 传递参数和接受参数

parmas传递参数的时候,不会在地址栏展示。
它是通过内存来传递参数的。
router.push({
name:'你路由中的name',
parmas:'是一个对象'
}) 接受参数的时候
route.params.xxx
需要注意的是:由于它是通过内存来传递参数的,在接受页面刷新的时候,参数肯定会丢失的。
可以通过动态路由传递参数来解决

动态路由参数

#### index.ts文件
{
path: '/',
name: 'test',
component:()=>import('../pages/test/test.vue')
},
{
path: '/home/:idkey', //注意这里的idkey
name: 'Home',
component:()=>import('../pages/home/home.vue')
} #### 跳转到home页面
const gotosPage = (mess) => {
router.push({
name: 'Home',
params: {
//必须和路由路径中的idkey保持一致
idkey: mess.id
}
})
} #### 接受参数
import { useRoute } from 'vue-router'
let route = useRoute()
console.log(route.params.idkey)

动态路由参数的场景

当我们从列表页进入详情页的时候,
就可以使用动态路由参数来解决这个问题

命名视图

index.ts文件
{
path: '/aa',
name: 'Aa',
component: () => import('../pages/aa/aa.vue'),
children: [
{
path: '/user1',
components: {
default:()=> import("../components/user1.vue")
}
},
{
path: '/user2',
components: {
Bb2: () => import("../components/user2.vue"),
Bb3:()=> import("../components/user3.vue")
}
}
]
} aa.vue文件
<template>
<div>
<h2>父页面</h2>
<router-link to="/user1" style="margin-right:10px">user1</router-link>
<router-link to="/user2">user2</router-link>
<router-view></router-view>
<router-view name="Bb2"></router-view>
<router-view name="Bb3"></router-view>
</div>
</template> 当地址栏是user1的时候,默认展示的是user1这个页面。
当地址栏是user2的时候,默认展示的是user2和user2这两个页面

路由重定向 redirect

redirect的值可以是一个字符串,也可以是一个回调函数。
index.ts文件
{
path: '/aa',
name: 'Aa',
//重定向到user1。并且携带了参数
redirect: () => {
return {
path: '/user1',
query: {
name:'zs'
}
}
},
component: () => import('../pages/aa/aa.vue'),
children: [
{
path: '/user1',
components: {
default:()=> import("../components/user1.vue")
}
},
{
path: '/user2',
components: {
Bb2: () => import("../components/user2.vue"),
Bb3:()=> import("../components/user3.vue")
}
}
]
},

别名alias

{
path: '/',
alias:['/a1','/a2'],
name: 'test',
component:()=>import('../pages/test/test.vue')
}
路径不同,但是访问的都是同一个组件。

前置路由守卫 (router.beforeEach) 设置title

main.ts文件
router.beforeEach((to,from,next) => {
document.title = to.meta.title
next()
})
//有ts报错信息
不能将类型“unknown”分配给类型“string”。 在index.ts文件
//中定义路由title的类型
declare module 'vue-router' {
interface RouteMeta{
title:string
}
}

路由过渡效果

animate.css的地址: https://animate.style/
第一步:下载 cnpm install animate.css --save
因为等会我们的动画效果将会使用这个库 第二步:在index.ts文件中设置动画样式
//这里我们使用的是 animate__fadeIn 渐入的效果
import { createRouter, RouteRecordRaw, createWebHashHistory } from 'vue-router'
// 定义类型
declare module 'vue-router' {
interface RouteMeta{
title: string,
transition ?:string
}
}
const routes: Array<RouteRecordRaw> = [
{
path: '/',
name: 'test',
meta: {
title: '首页',
//动画效果渐入
transition:"animate__fadeIn",
},
component:()=>import('../pages/test/test.vue')
},
]
const router = createRouter({
history:createWebHashHistory(), //哈希值模式
routes
})
// 暴露出去
export default router 第三步使用动画效果 app.vue文件中
<template>
<router-view #default="{ route, Component }">
<!-- 使用方法,在class里加上类animate__animated与任何动画名称一起添加到元素,此处为渐入的效果 -->
<transition :enter-active-class="`animate__animated ${route.meta.transition}`">
<component :is="Component"></component>
</transition>
</router-view>
</template>
<script lang="ts" setup>
//引入动画库
import 'animate.css';
</script>

滚动行为

A页面有滚动条,在距离顶部400px的地方。点击按钮前往了B页面。
当B页面做完一些操作后,返回A页面。滚动条仍然在400px的地方。
index.ts文件
const router = createRouter({
history: createWebHashHistory(), //哈希值模式
// 路由滚动
scrollBehavior: (to, from, savePosition) => {
// 记录滚动条滚动到的位置
if (savePosition && savePosition.top) {
return savePosition
} else {
return {
top:0
}
}
},
routes
}) scrollBehavior也是支持异步的
const router = createRouter({
history: createWebHashHistory(), //哈希值模式
// 路由滚动
scrollBehavior: (to, from, savePosition) => {
// 记录滚动条滚动到的位置
return new Promise((resolve) => {
setTimeout(() => {
resolve({
top:500
})
},1500)
})
},
routes
})

vue-router4 |name的作用|query传参|parmas传参|动态路由参数|命名视图|别名alias|前置路由守卫|路由过渡效果|滚动行为的更多相关文章

  1. [Vue 牛刀小试]:第十三章 - Vue Router 基础使用再探(命名路由、命名视图、路由传参)

    一.前言 在上一章的学习中,我们简单介绍了前端路由的概念,以及如何在 Vue 中通过使用 Vue Router 来实现我们的前端路由.但是在实际使用中,我们经常会遇到路由传参.或者一个页面是由多个组件 ...

  2. VueJs(11)---vue-router(命名路由,命名视图,重定向别名,路由组件传参)

    vue-router 上篇文章讲了第一篇vue-router相关文章,文章地址:VueJs(10)---vue-router(进阶1) 一.命名路由 有时候,通过一个名称来标识一个路由显得更方便一些, ...

  3. Vue学习笔记【29】——Vue路由(命名视图实现经典布局)

    命名视图实现经典布局 标签代码结构:  <div id="app">    <router-view></router-view>    < ...

  4. (转)vue router 如何使用params query传参,以及有什么区别

    写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...

  5. vue router 如何使用params query传参,以及有什么区别

    写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...

  6. vue页面传参和接参

    https://blog.csdn.net/zhouzuoluo/article/details/81259298(copy) js** this.$router.push({ name: 'Flow ...

  7. vue 组件之间相互传值 父传子 子传父

    1.父传子 把要传入的值放到父标签里  子组件使用props接收 父写法 子写法 2.子传父 子组件: childrenOnclick() { // 发布自定义事件 this.$emit(" ...

  8. Vue ---- 组价 组件化 子传父 父传子

    目录 补充js的for循环: 组件 1.组件的分类: 2.组件的特点 3.创建局部组件 4.全局组件 二.组件化 一.组件传参父传子 二.组件传参:子传父 补充js的for循环: // for in遍 ...

  9. C++ 传参时传内置类型时用传值(pass by value)方式效率较高

    来源:唐磊的个人博客<C++ 传参时传内置类型时用传值(pass by value)方式效率较高> 在<Effective C++>里提到对内置(C-like)类型在函数传参时 ...

随机推荐

  1. Docker容器安装RabbitMQ

    Docker容器安装RabbitMQ 准备资料 erlang的rpm安装包 https://github.com/rabbitmq/erlang-rpm/releases rabbitmq的rpm安装 ...

  2. JAVA学习之第一个HelloWorld程序

    第一个HelloWorld程序 第一步,创建java类型的文件 第二步,在创建文件的目录中打开cmd窗口 第三步,使用javac 命令将java文件编译为.class类型的字节码文件 第四步,使用ja ...

  3. 手把手教学~基于element封装tree树状下拉框

    在日常项目开发中,树状下拉框的需求还是比较常见的,但是element并没有这种组件以供使用.在这里,小编就基于element如何封装一个树状下拉框做个详细的介绍. 通过这篇文章,你可以了解学习到一个树 ...

  4. VisionPro · C# · 图像保存

    根据客户要求,每次视觉取像运行完毕后,按需保存OK或NG图像,图像分两种: 1.带视觉工具运行结果图像: 2.相机取像原图,.bmp格式. 保存图像代码如下: using System; using ...

  5. Unity3D学习笔记4——创建Mesh高级接口

    目录 1. 概述 2. 详论 3. 其他 4. 参考 1. 概述 在文章Unity3D学习笔记2--绘制一个带纹理的面中使用代码的方式创建了一个Mesh,不过这套接口在Unity中被称为简单接口.与其 ...

  6. NC16663 [NOIP2004]合并果子

    NC16663 [NOIP2004]合并果子 题目 题目描述 ​ 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. ​ 每一次合并,多多可 ...

  7. C语言动态输出等腰三角形

    C语言动态输出等腰三角形 题目要求:输入行数 打印出对应行数的等腰三角形,要求使用for循环嵌套. 思路 while语句写外层死循环 用于判断输出的数据: 分析: 最外层for,来控制最外层行数,存储 ...

  8. 利用MATLAB仿真节点个数和节点通信半径与网络连通率的关系

    一.目的 ①在不同节点个数的情况下,用Matlab拟合出连通率与通信半径的关系曲线. ②在不同节点通信半径的情况下,用Matlab拟合出连通率与节点个数的关系曲线. 二.方法描述 在1x1的单位矩形中 ...

  9. IO流原理及流的分类

    IO原理 I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于 处理设备之间的数据传输.如读/写文件,网络通讯等. Java程序中,对于数据的输入/输出操作以"流(st ...

  10. PostgreSQL下的SQL Shell(psql)工具

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485130&idx=1 ...