vue重修之路由【下】

news2024/11/13 9:17:53

文章目录

  • 版权声明
  • 路由重定向、404,路由模式
    • 重定向
    • 404
    • 路由模式
  • 声明式导航
    • vue-router
    • router-link-active 和 router-link-exact-active
    • 定制router-link-active 和 router-link-exact-active
    • 跳转传参
    • 两种跳转传参总结
  • 编程式导航
    • 两种语法
    • 路由传参
      • path路径跳转传参
      • name命名路由传参
  • 缓存组件
    • keep-alive初识
    • 额外的两个生命周期钩子

版权声明

  • 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。
  • 我在整理学习笔记的过程中尽力确保准确性,但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。
  • 若您是黑马程序员或相关权利人,如有任何侵犯版权的地方,请您及时联系我,我将立即予以删除或进行必要的修改。
  • 对于其他读者,请在阅读本博客内容时保持遵守相关法律法规和道德准则,谨慎参考,并自行承担因此产生的风险和责任。本博客中的部分观点和意见仅代表我个人,不代表黑马程序员的立场。

路由重定向、404,路由模式

重定向

在这里插入图片描述

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

  • 解决方案:重定向 → 匹配 / 后, 强制跳转 /home 路径

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

  • 代码演示

    const router = new VueRouter({
      routes: [
        { path: '/', redirect: '/home'},
     	 ...
      ]
    })
    

404

  • 作用:当路径找不到匹配时,给个提示页面
  • 位置:配在路由最后
  • 语法:path: “*” (任意路径) – 前面不匹配就命中最后这个
import NotFind from '@/views/NotFind'
const router = new VueRouter({
	routes: [
	{ path: '/', redirect: '/home' },
	{ path: '/home', component: Home },
	{ path: '*', component: NotFind }
	]
})
  • NotFound.vue
    <template>
      <div>
        <h1>404 Not Found</h1>
      </div>
    </template>
    
    <script>
    export default {
    
    }
    </script>
    
    <style>
    
    </style>
    

路由模式

  • Vue Router 支持两种路由模式:
    • hash路由(默认) 例如: http://localhost:8080/#/path
    • history路由(常用) 例如: http://localhost:8080/path

  1. Hash 模式 (默认模式):

    • 在 URL 中带有 #,例如 http://example.com/#/path
    • 使用 window.location.hash 来监听路由变化。
    • 优点:兼容性好,支持老版本浏览器。
    • 缺点: URL 中会出现 #,有时可能不太美观。
  2. History 模式:

    • 使用 HTML5 History API 来实现,不带 #,例如 http://example.com/path
    • 需要特定的服务器配置来支持这种模式。
    • 优点;URL 更加干净美观,符合传统 URL 结构。
    • 缺点:需要后端服务器支持,并且在不正确配置的情况下可能会导致404错误。
  • 在创建 Vue Router 实例时通过 mode 选项来指定使用的路由模式:
const router = new VueRouter({
	//如果没有显式指定 mode,那么默认将使用 Hash 模式
  mode: 'history', // 使用 History 模式
  routes: [
    // ... 路由配置
  ]
})
  • 需要注意的是,如果使用 History 模式,还需要在服务器端进行相应的配置,以确保在直接访问页面时能正确地返回对应的内容,而不是得到 404 错误。

    • 在使用 History 模式时,可以使用 base 选项来指定基础URL,这样在路由跳转时会自动拼接到URL前面
    const router = new VueRouter({
      mode: 'history',
      base: '/myapp/', // 在此处指定基础 URL
      routes: [
        // ... 路由配置
      ]
    })
    
  • 总的来说,Hash 模式通常更容易配置和使用,而 History 模式提供了更美观的 URL 结构

声明式导航

vue-router

  • vue-router 提供了一个全局组件 router-link (取代 a 标签)
    • 能跳转,配置 to 属性指定路径(必须) 。本质还是 a 标签 ,to 无需 #
    • 能高亮,默认就会提供高亮类名,可以直接设置高亮样式
      在这里插入图片描述
  • 通过router-link自带的两个样式进行高亮
    • 使用router-link跳转后,当前点击的链接默认加了两个class的值 router-link-exact-activerouter-link-active
      在这里插入图片描述

router-link-active 和 router-link-exact-active

  • router-link-active 和 router-link-exact-active 是两个用于处理导航链接样式的特殊类名。这些类名用于控制当导航链接与当前路由匹配时,所应用的CSS类。

    1. router-link-active: 模糊标识当前活动(即匹配了当前路由)的导航链接的。
    <router-link to="/home" class="nav-link" active-class="router-link-active">Home</router-link>
    
    1. router-link-exact-active: 标识当前精确匹配的导航链接的。与router-link-active不同,router-link-exact-active只有在链接与当前路由完全匹配时才会被添加。
    <router-link to="/" class="nav-link" exact active-class="router-link-exact-active">Home</router-link>
    

定制router-link-active 和 router-link-exact-active

在这里插入图片描述

跳转传参

  • 跳转传参有两种方式,在跳转的时候把所需要的参数传到其他页面中
    1. 查询参数传参
    <router-link to="/path?参数名=值"></router-link>
    
    • 对应页面组件接受参数
    $router.query.参数名
    
    1. 动态路由传参
    • /search/:words 表示,必须要传参数,否则,会导致路由错误。如果不传参数,也希望匹配,可以加个可选符"?"
    	const router = new VueRouter({
      routes: [
        ...,
        { 
          path: '/search/:words', 
          component: Search 
        }
      ]
    })
    
    • 对应页面组件接受参数
    $route.params.参数名
    

  • 查询参数查询栗子
    <div class="hot-link">
      热门搜索:
      <router-link to="/search?key=手机">手机</router-link>
      <router-link to="/search?key=电脑">电脑</router-link>
    </div>
<p>搜索关键字: {{ $route.query.key }} </p>

  • 动态路由(可选符)传参栗子
import Home from '@/views/Home'
import Search from '@/views/Search'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化

const router = new VueRouter({
  routes: [
    { path: '/home', component: Home },
    { path: '/search/:words?', component: Search }
  ]
})
export default router
    <div class="hot-link">
      热门搜索:
      <router-link to="/search/手机">手机</router-link>
      <router-link to="/search/电脑">电脑</router-link>
    </div>
<p>搜索关键字: {{ $route.params.words }} </p>

两种跳转传参总结

方式适用场景优点示例
查询参数传参传递多个参数时较为方便灵活,可以传递多个参数1. to=“/path?key=value&param2=value”
易于构建和理解URL2. $route.query.key
不限于特定路由配置3. 适用于非动态路由情况
动态路由传参传递单个参数时优雅简洁清晰明了,路由中直接体现参数1. 配置:path: “/path/:param”
易于维护和理解路由结构2. to=“/path/value”
利于定义必要参数的路由3. $route.params.param
更有助于RESTful路由设计4. 适用于资源标识和特定路由参数的传递
  • 查询参数传参在需要传递多个参数或者不依赖路由结构时更为灵活。
  • 动态路由传参在需要传递单个参数、维护清晰的路由结构以及实现RESTful路由设计时更为优雅和适用。

编程式导航

两种语法

  • 编程式导航:用JS代码来进行跳转
  • 两种语法:
    1. path 路径跳转 (简易方便)
    2. name 命名路由跳转 (适合 path 路径长的场景)
  • path路径跳转语法
    • 特点:简易方便
    //简单写法
    this.$router.push('路由路径')
    
    //完整写法
    this.$router.push({
      path: '路由路径'
    })
    
  • 栗子
<script>
export default {
  name: 'FindMusic',
  methods: {
    goSearch () {
      // 1. 通过路径的方式跳转
       this.$router.push('路由路径') [简写]
       this.$router.push('/search')

       this.$router.push({     [完整写法]
              path: '路由路径' 
          })
       this.$router.push({
         path: '/search'
       })

    }
  }
}
</script>

  • name命名路由跳转

    • 特点:适合 path 路径长的场景
      语法:
  • 路由规则,必须配置name配置项

    { name: '路由名', path: '/path/xxx', component: XXX },
    
  • 通过name来进行跳转

    this.$router.push({
      name: '路由名'
    })
    
  • 栗子

    • router/index.js配置
    import Search from '@/views/Search'
    import Vue from 'vue'
    import VueRouter from 'vue-router'
    Vue.use(VueRouter) // VueRouter插件初始化
    
    // 创建了一个路由对象
    const router = new VueRouter({
      // 注意:一旦采用了 history 模式,地址栏就没有 #,需要后台配置访问规则
      mode: 'history',
      routes: [
        { name: 'search', path: '/search/:words?', component: Search },
      ]
    })
    export default router
    
    • views/home.vue文件部分内容
<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'
      // })

      this.$router.push({
        name: 'search'
      })
    }
  }
}
</script>

路由传参

path路径跳转传参

  • 两种传参方式
    1. 查询参数
    2. 动态路由传参
  1. path路径跳转传参(query传参)
    //简单写法
    this.$router.push('/路径?参数名1=参数值1&参数2=参数值2')
    //完整写法
    this.$router.push({
      path: '/路径',
      query: {
        参数名1: '参数值1',
        参数名2: '参数值2'
      }
    })
    
    • 接受参数的方式依然是:$route.query.参数名
    • 注意: path不能配合params使用
  2. path路径跳转传参(动态路由传参)
    //简单写法
    this.$router.push('/路径/参数值')
    //完整写法
    this.$router.push({
      path: '/路径/参数值'
    })
    
    • 接受参数的方式依然是:$route.params.参数值

name命名路由传参

  1. name 命名路由跳转传参 (query传参)
this.$router.push({
  name: '路由名字',
  query: {
    参数名1: '参数值1',
    参数名2: '参数值2'
  }
})
  1. name 命名路由跳转传参 (动态路由传参)
this.$router.push({
  name: '路由名字',
  params: {
    参数名: '参数值',
  }
})

缓存组件

keep-alive初识

  • 在Vue.js中,可以通过使用keep-alive组件来缓存其他组件的实例,以提高应用性能。

  • keep-alive是Vue内置的组件,可以用来缓存已渲染的组件,以便在切换路由或组件时,不需要重新创建和销毁组件实例.

  • keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件中。

  • 优点:

    • 在组件切换过程中把切换出去的组件保留在内存中,防止重复渲染DOM,
    • 减少加载时间及性能消耗,提高用户体验性。
  • keep-alive缓存组件操作步骤:

  1. 首先,导入Vue和Vue Router:
   import Vue from 'vue';
   import VueRouter from 'vue-router';

   Vue.use(VueRouter);
  1. 创建一个Vue Router实例,并定义你的路由:
   const router = new VueRouter({
     routes: [
       { path: '/', component: Home },
       { path: '/about', component: About },
       // 其他路由
     ],
   });
  1. 在Vue组件中,使用keep-alive来包裹需要缓存的组件:
<template>
  <div class="h5-wrapper">
    <keep-alive :include="['LayoutPage']">
      <router-view></router-view>
    </keep-alive>
  </div>
</template>
  • keep-alive的三个属性
    ① include : 组件名数组,只有匹配的组件会被缓存
    ② exclude : 组件名数组,任何匹配的组件都不会被缓存
    ③ max : 最多可以缓存多少组件实例

额外的两个生命周期钩子

keep-alive的使用会触发两个生命周期函数

  • activated 当组件被激活(使用)的时候触发 → 进入这个页面的时候触发

  • deactivated 当组件不被使用的时候触发 → 离开这个页面的时候触发

  • 组件缓存后不会执行组件的created, mounted, destroyed 等钩子,所以其提供了actived 和deactived钩子,帮我们实现业务需求。

  • 栗子

<script>
export default {
  // 组件名(如果没有配置 name,才会找文件名作为组件名)
  name: 'LayoutPage',
  // 组件缓存了,就不会执行组件的created,mounted,destroyed等钩子
  // 所以提供了 actived 和 deactived
  created () {
    console.log('created 组件被加载了');
  },
  mounted () {
    console.log('mounted dom渲染完了');
  },
  destroyed () {
    console.log('destroyed 组件被销毁了');
  },

  activated () {
    alert('你好,欢迎回到首页')
    console.log('activated 组件被激活了,看到页面了');
  },
  deactivated () {
    console.log('deactivated 组件失活,离开页面了');
  }
}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka3.x安装以及使用

一、Kafka下载 下载地址&#xff1a;https://kafka.apache.org/downloads 二、Kafka安装 因为选择下载的是 .zip 文件&#xff0c;直接跳过安装&#xff0c;一步到位。 选择在任一磁盘创建空文件夹&#xff08;不要使用中文路径&#xff09;&#xff0c;解压之后把文件夹内容剪…

10个最流行的开源机器视觉标注工具

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 我们知道寻找良好的图像标记和注释工具对于创建准确且有用的数据集的重要性。 随着图像注释空间的增长&#xff0c;我们看到开源工具的可用性激增&#xff0c;这些工具使任何人都可以免费标记他们的图像并从强大的功能中受…

这5种炫酷的动态图,都是用Python实现的!

数据可以帮助我们描述这个世界、阐释自己的想法和展示自己的成果&#xff0c;但如果只有单调乏味的文本和数字&#xff0c;我们却往往能难抓住观众的眼球。而很多时候&#xff0c;一张漂亮的可视化图表就足以胜过千言万语。本文将介绍 5 种基于 Plotly 的可视化方法&#xff0c…

IP地址SSL证书 IP证书

在许多企业用例中&#xff0c;公司需要SSL证书作为IP地址。公司使用IP地址通过Internet访问各种类型的应用程序。 公网IP地址的SSL证书&#xff1a; 内部IP&#xff08;也称为私有IP&#xff09;是IANA设置为保存的IPv4或IPv6地址&#xff0c;例如&#xff1a; RFC 1918范围内…

编译原理如何写出不带回溯的递归子程序?

递归子程序 使用不带回溯的递归子程序解析文法是预测性语法分析的基础&#xff0c;这通常需要该文法是LL(1)文法。每个非终结符对应一个递归子程序&#xff0c;并使用当前的输入符号和FIRST集合来决定调用哪个产生式。 让我们以一个简单的文法为例&#xff1a; 对于此文法&am…

大模型开发06:LangChain 概述

大模型开发06:LangChain 概述 LangChain 是一个基于语言模型开发应用程序的框架。它可以实现以下功能: 上下文感知: 将语言模型与上下文源相连接(提示词、示例、用于支撑响应的内容等)推理能力: 依赖语言模型进行推理(如何根据提供的上下文来回答问题或采取哪些行动等)La…

抖音手把手带,开放到月底!

这个月一直在做的两件事&#xff0c;一个是带内部社员&#xff0c;去把抖音项目跑通。一个是招募合伙人。简单说下这两个事&#xff0c;之前一直没在公众号说。 带学员这件事&#xff0c;默认收徒只到月底。感兴趣的直接报名&#xff0c;价格4980。这块无需多言&#xff0c;做一…

如何解散微信群?这两个方法收藏好!

微信群&#xff0c;简单来说就是多人社交&#xff0c;能够让用户与多个人进行交流与互动。群主可以邀请有共同爱好的朋友在一个群里聊天、分享信息等等&#xff0c;以此来增强社交互动。 如果是一些临时活动群或者群成员已经不活跃的情况下&#xff0c;那么群主可能会选择将群…

mysql图片存取初探

mysql数据库中使用blob存储使用base64加密图片数据 前言 这个方法并不好&#xff0c;因为传输的数据量还是蛮大的&#xff0c;可以存一些诸如头像的小图片&#xff0c;但是如果要存较大的图片会很慢。 不过只是课程作业中简单的功能&#xff0c;这样子简单又快捷&#xff0c;…

各类深度学习框架详解+深度学习训练环境搭建-GPU版本

目录 前言 一、深度学习框架 TensorFlow PyTorch Keras Caffe PaddlePaddle 二、深度学习框架环境搭建 1.CUDA部署 CUDA特性 CUDA下载 2.cuDNN cuDNN 的主要特性 cuDNN 下载 3.安装TensorFlow框架 TensorFlow 2 旧版 TensorFlow 1 4.安装PyTorch框架 5.安装Ca…

MySQL字段加密方案 安当加密

要通过安当KSP密钥管理系统实现MySQL数据库字段的加密&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装和配置安当KSP密钥管理系统&#xff1a;首先&#xff0c;您需要安装安当KSP密钥管理系统&#xff0c;并按照说明进行配置。确保您已经正确地设置了密钥管理系统的用…

数据结构与算法之图: Leetcode 417. 太平洋大西洋水流问题 (Typescript版)

太平洋大西洋水流问题 https://leetcode.cn/problems/pacific-atlantic-water-flow/description/ 描述 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被…

Elsevier上传LaTeX修改稿常见问题解决方法

在撰写科研论文时&#xff0c;一般会使用latex或者word两种工具。在论文的返修阶段&#xff0c;很多期刊要求我们上传可编辑格式的稿件。word在上传到爱思唯尔系统中时候很方便&#xff0c;但latex是较为麻烦的&#xff0c;下面和大家分享一下我在上传latex手稿时遇到的一些问题…

【人工智能】LLM 大型语言模型和 Transformer 架构简介

目录 大型语言模型 (LLM) 一、LLM的起源 二、LLM的发展阶段 三、LLM的应用领域

torch.nn.Parameter()

一文通俗理解torch.nn.Parameter() 一、起源 首先&#xff0c;我写这篇文章的起源是因为&#xff0c;我突然看到了一段有关torch.nn.Parameter()的代码。 因此就去了解了一下这个函数&#xff0c;把自己的一些理解记录下来&#xff0c;希望可以帮到你。 二、官方文档 网址如下…

单目3D目标检测[基于几何约束篇]

基于语义和几何约束的方法 1. Deep3DBox 3D Bounding Box Estimation Using Deep Learning and Geometry [CVPR2017]https://arxiv.org/pdf/1612.00496.pdfhttps://zhuanlan.zhihu.com/p/414275118 核心思想&#xff1a;通过利用2D bounding box与3D bounding box之间的几何约…

直播录屏没有声音?解决方案来了!

在进行游戏直播、教程制作或在线会议录制时&#xff0c;有声音的录屏是至关重要的。然而&#xff0c;有时用户可能会面临直播录屏没有声音的问题。在本文中&#xff0c;我们将介绍两种常用的方法来解决这个问题&#xff0c;通过遵循下面的步骤&#xff0c;您将能够轻松地添加声…

Osgb转3DTiles工具

三维倾斜摄影生产主要格式为Osgb&#xff0c;目前三维模型主要展示场景为web&#xff0c;大部分使用框架都是Cesium库&#xff0c;格式为 3DTiles&#xff0c;目前市面上osgb转3DTiles的软件已经有好几个&#xff0c;付费免费都有。 先说免费软件&#xff1a; 1、CesiumLab …

SaaS是云计算服务,不是互联网平台

习惯性的把SaaS云计算服务&#xff0c;理解成平台&#xff0c;是不对的&#xff01; SaaS本质就是云计算服务&#xff0c;企业在saas应用系统里操作业务&#xff0c;背后都是各种云计算操作。 但是&#xff0c;中国的互联网环境就都是巨头平台所主导&#xff0c;所以大家基本…

华为OD机试 - 寻找最大价值的矿堆 - 矩阵(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多…