Vue中对路由的进阶学习

路由进阶

文章目录

  • 路由进阶
    • 1、路由的封装抽离
    • 2、声明式导航
      • 2.1、导航链接
      • 2.2、高亮类名
      • 2.3、跳转传参
      • 2.4、动态路由参数可选符
    • 3、Vue路由--重定向
    • 4、Vue路由--404
    • 5、Vue路由–模式设置
    • 6、编程式导航
      • 6.1、基本跳转
      • 6.2、跳转传参

路由基础入门

1、路由的封装抽离

问题:所有的路由配置都堆在main.js中合适么?

目标:将路由模块抽离出来。好处:拆分模块,利于维护

原本的写在main.js的代码:

image-20231010121608596

将路由的代码提取出来放在router文件夹下,并配置下列核心的操作:

image-20231010121252029

2、声明式导航

2.1、导航链接

需求:实现导航高亮效果

vue-router提供了一个全局组件router-link(取代a标签)

  1. 跳转,配置 to属性指定路径(必须)。本质还是a标签,to无需#
  2. 高亮,默认就会提供高亮类名,可以直接设置高亮样式

将a标签的代码进行替换:

image-20231010124004537

审查元素将新增的类改变属性:(router-link-exact-active 和 router-link-active)

image-20231010124059816

2.2、高亮类名

说明:我们发现router-link自动给当前导航添加了两个高亮类名(router-link-exact-active 和 router-link-active)

  1. router-link-ctive模糊匹配(用的多)

    to="/my"  => 可以匹配'/my'开头的所有路径,如/my,/my/a/...
    
  2. router-link-exact-active精确匹配

    to="/my"  =>  仅可以匹配/my
    

说明:router-link的两个高亮类名太长了,我们希望能定制怎么办?

const router = new VueRouter({routes: [...],linkActiveclass: "类名1",linkExactActiveclass: "类名2"
})

上述操作相当于实现了自定义的类名,将两个高亮的类名进行自定义以达到简写或其他目的。

2.3、跳转传参

在跳转路由时,进行传值,有一下两种方式:

  1. 查询参数传参
    1. 语法格式如下
      • to=“/path?参数名=值”
    2. 对应页面组件接收传递过来的值
      • $route.query.参数名

参数传递:

  <div class="hot-link">热门搜索:<router-link to="/search?key=程序员">程序员</router-link><router-link to="/search?key=前端培训">前端培训</router-link><router-link to="/search?key=如何成为前端大牛">如何成为前端大牛</router-link></div>

参数接收:

<template><div><p>搜索关键字: {{ $route.query.key }} </p></div>
</template>

使用传递过来的值:

<template><div><p>搜索关键字: {{ $route.query.key }} </p></div>
</template>
<script>
export default {created () {// 在created中,获取路由参数:// this.$route.query.参数名console.log(this.$route.query.key);//拿到值之后就发请求,然后渲染到页面}
}
</script>
  1. 动态路由传参

    1. 配置动态路由

      const router = new VueRouter({routes: [{ path: '/search/:参数名', component: Search }]
      })
      
    2. 配置导航链接

      • to=“/path/参数值”
    3. 对应页面组件接收传递过来的值

      • $route.params.参数名

参数传递:

    <div class="hot-link">热门搜索:<router-link to="/search/程序员">程序员</router-link><router-link to="/search/前端培训">前端培训</router-link><router-link to="/search/如何成为前端大牛">如何成为前端大牛</router-link></div>

参数接受:

<template><div><p>搜索关键字: {{ $route.params.words }} </p></div>
</template>

使用传递过来的参数:

<script>
export default {name: 'MyFriend',created () {// 在created中,获取路由参数// this.$route.query.参数名 获取查询参数// this.$route.params.参数名 获取动态路由参数console.log(this.$route.params.words);}
}
</script>

两种传参方式哪种要好一些:

  1. 查询参数传参((比较适合传多个参数)
  2. 动态路由传参(优雅简洁,传单个参数比较方便)

2.4、动态路由参数可选符

问题:配了路由path: "/search/:words”为什么按下面步骤操作,路径上没有参数,会未匹配到组件,显示空白?

在这里插入图片描述

原因:/search/:words表示,必须要传参数。如果不传参数,也希望匹配,可以加个可选符"?"

解决:

const router = new VueRouter({routes: [{ path: '/home', component: Home },{ path: '/search/:words?', component: Search }]
})

3、Vue路由–重定向

问题:网页打开,url默认是/路径,未匹配到组件时,会出现空白

说明:重定向匹配path后,强制跳转path路径

语法:{ path:匹配路径, redirect:重定向到的路径},

const router = new VueRouter({routes: [{ path: "/", redirect: "/home" },  // 在路径上只输了’/‘时,就会默认重定向到“/home”中]
})

4、Vue路由–404

作用:当路径找不到匹配时,给个提示页面

位置:配在路由最后

语法:path: "*”(任意路径)–前面不匹配就命中最后这个

const router = new VueRouter({routes: [{ path: "*",conponent:NotFound }, ]
})

5、Vue路由–模式设置

问题:路由的路径看起来不自然,有#,能否切成真正路径形式?

hash路由(默认) 例如: http://localhost:8080/#/home

history路由(常用) 例如: http://localhost:8080/home (以后上线需要服务器端支持)

实现:

const router = new VueRouter({routes:[{...}],mode: "history"  //一旦采用了history模式之后就没有#了,但是需要后台配置访问规则
})

6、编程式导航

6.1、基本跳转

需求:点击按钮跳转如何实现?

编程式导航:用JS代码来进行跳转

  1. path 路径跳转(简易方便)

    this.$router.push('路由路径')     //方式1this.$router.push({     //方式2path:'路由路径'
    })
    
  2. 通过命名路由的方式跳转 (需要给路由起名字) 适合path路径长的情况

    const router = new VueRouter({routes: [{ name: 'search', path: '/search/:words?', component: Search },]
    })
    
    this.$router.push({name: '路由名'
    })
    

    示例:

    <template><button @click="goSearch">搜索一下</button>
    </template><script>
    export default {name: 'FindMusic',methods: {goSearch () {// 1. 通过路径的方式跳转// (1) this.$router.push('路由路径') [简写]// this.$router.push('/search')// (2) this.$router.push({     [完整写法]//         path: '路由路径' //     })// this.$router.push({//   path: '/search'// })// 2. 通过命名路由的方式跳转 (需要给路由起名字) 适合长路径//    this.$router.push({//        name: '路由名'//    })this.$router.push({name: 'search'})}}
    }
    </script>
    

6.2、跳转传参

需求:点击搜索按钮,跳转需要传参如何实现?

两种传参方式:查询参数,动态路由传参

  1. path 路径跳转传参(query传参,动态路径传参)

    query传参:

        (1)this.$router.push('路由路径') [简写]this.$router.push('路由路径?参数名=参数值')//跳转到其他页面接收:$router.query.参数名(2) this.$router.push({    // [完整写法] 更适合传参path: '路由路径'query: {参数名: 参数值,参数名: 参数值}})//跳转到其他页面接收:$router.query.参数名
    

    动态路径传参:

      this.$router.push({name: '路由名'query: { 参数名: 参数值 },params: { 参数名: 参数值 }})//跳转到其他页面接收:$router.params.参数名    (动态传参就需要配置路由,例如下列代码)
    // const router = new VueRouter({
    //   routes: [
    //     { name: 'search', path: '/search/:参数名?', component: Search }
    //   ]
    // })
    
  2. name命名路由跳转传参

    query传参:

     this.$router.push({name: '路由名'query: { 参数名: 参数值 }})//跳转到其他页面接收:$router.query.参数名
    

    动态路径传参:

     this.$router.push({name: '路由名'params: { 参数名: 参数值 }})
    //跳转到其他页面接收:$router.params.参数名    (动态传参就需要配置路由,例如下列代码)
    // const router = new VueRouter({
    //   routes: [
    //     { name: 'search', path: '/search/:参数名?', component: Search }
    //   ]
    // })
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/131050.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整车热管理「升温」,哪些厂商排名电子风扇市场份额TOP10

作为整车热管理系统的关键组成部分&#xff0c;风扇在传统燃油车时代主要是帮助发动机、空调系统进行散热冷却&#xff1b;同时&#xff0c;产品也经历了从硅油风扇到电子风扇&#xff08;从有刷电机到无刷电机的演进&#xff09;的升级。 而在新能源汽车的架构中&#xff0c;…

软件测试工程师是做什么的?这是我的理解...

近年来&#xff0c;由于IT行业的人才稀缺&#xff0c;越来越多人转向了IT相关职业。 由于IT软件业的薪资较高&#xff0c;吸引了不少人选择了IT软件专业&#xff0c;IT软件专业包括软件开发、Java工程师、软件测试工程师等。 软件测试工程师主要是负责理解产品的功能要求&…

linux后台运行java项目/ jar包:nohup 命令

1.提出问题 我们把一个 SpringBoot 工程导出为 jar 包&#xff0c;jar 包上传到阿里云 ECS 服务器上&#xff0c;使用 java -jar xxx-xxx.jar 命令启动这个 SpringBoot 程序。此时我们本地的 xshell 客户端必须一直开着&#xff0c;一旦 xshell 客户端关闭&#xff0c;java -j…

百度SEO优化的特点(方式及排名诀窍详解)

百度SEO优化的特点介绍&#xff1a; 百度SEO优化是指对网站进行优化&#xff0c;使其在百度搜索引擎中获得更好的排名&#xff0c;进而获取更多的流量和用户。百度SEO优化的特点是综合性强、效果持久、成本低廉、投资回报高。百度的搜索算法不断更新&#xff0c;所以长期稳定的…

软件测试/测试开发丨为什么接口自动化测试是提升职业技能的关键?

接口测试背景和必要性 接口测试是测试系统组件间接口&#xff08;API&#xff09;的一种测试&#xff0c;主要用于检测内部与外部系统、内部子系统之间的交互质量&#xff0c;其测试重点是检查数据交换、传递的准确性&#xff0c;控制和交互管理过程&#xff0c;以及系统间相互…

蓝桥杯 字符串和日期

有一个类型的题目是找到输出图形的规律&#xff0c;然后将其实现。观察下面的图形。你想想你该怎么输出这个图形呢? ABBB#include<stdio.h> int main(){printf(" A\n");printf("BBB\n");return 0; }那么&#xff0c;对于如下的图形&#xff1a; ABB…

c++视觉处理---cv::Sobel()`算子

cv::Sobel()算子 cv::Sobel()是OpenCV库中的函数之一&#xff0c;用于计算图像的Sobel梯度。Sobel梯度是一种常用的图像处理技术&#xff0c;用于检测图像中的边缘和轮廓。 以下是cv::Sobel()函数的一般用法和参数&#xff1a; void cv::Sobel(cv::InputArray src, //…

mysql面试题35:MySQL有关权限的表有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…

实现动态表单的一种思路 | 京东云技术团队

一、动态表单是什么 区别于传统表单前后端配合联调的开发实现方式&#xff0c;动态表单通过一种基于元数据管理的配置化方法来实现表单的动态生成&#xff0c;并能根据配置自由增改删指定字段。实现特定需求的自助化。 图1.1 传统表单前后台协作模式 图1.2 动态表单前后台协作…

计算机竞赛YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快&#xff0c;YOLOv6还没用熟YOLOv7就来了&#xff0c;如果有同学的毕设项目想用上最新的技术&#xff0c;不妨看看学长的这篇文章&#xff0c;学长带大家简单的…

剑指offer——JZ37 序列化二叉树 解题思路与具体代码【C++】

一、题目描述与要求 序列化二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树&#xff0c;不对序列化之后的字符串进行约束&#xff0c;但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。 二叉…

【算法|动态规划No.16】leetcode931. 下降路径最小和

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…