VueJS 之路由

36 篇文章 2 订阅
16 篇文章 1 订阅

参考

项目描述
搜索引擎Bing
哔哩哔哩黑马程序员

描述

项目描述
Edge109.0.1518.70 (正式版本) (64 位)
操作系统Windows 10 专业版
@vue/cli5.0.8
npm8.19.3
VueJS2.6.14

路由

单页面应用程序

单页Web应用程序 (Single Page Web Application,SPA) 就是只有一张Web页面的应用,是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的 Web 应用程序。

Hash 地址

链接的基本组成

一个 URL 通常具有如下基本结构:

protocl://host/path/?param=value#name

其中:

项目描述
protocol使用到的协议。
host服务器的主机地址(域名)。
path路径。
param查询字符串中的查询参数。
vlaue查询字符串中某个参数对应的参数值。
#name锚点。
Hash 地址

Hash 地址 又称为 锚点,锚点是网页制作中超级链接的一种,是一种能够定位当前页面的元素的超级链接。

举个栗子

<html>

<body>

<p>
<a href="#C4">查看 Chapter 4。</a>
</p>

<h2>Chapter 1</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 2</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 3</h2>
<p>This chapter explains ba bla bla</p>

<!-- 为该元素命名为 C4,锚点将通过名称 C4 定位该元素。 -->
<h2><a name="C4">Chapter 4</a></h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 5</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 6</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 7</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 8</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 9</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 10</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 11</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 12</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 13</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 14</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 15</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 16</h2>
<p>This chapter explains ba bla bla</p>

<h2>Chapter 17</h2>
<p>This chapter explains ba bla bla</p>

</body>
</html>

执行效果:

效果

注:

  1. 本部分示例引用自 W3school
  2. 使用锚点链接将产生历史记录。一个较为直观的体现是,在点击锚点后,你可以点击浏览器中的左箭头按钮来返回点击锚点之前的页面。
    左箭头按钮

路由

路由在 VueJS 及 Web 后端中的概念稍有不同,但都表示某两者之间的映射关系。

VueJS

在 VueJS 中,路由可以理解为 Hash 地址组件 的映射关系。由于 VueJS 构建的是单页面应用程序,在构造具有如下效果的页面时,无法直接切换页面(因为仅有一个页面),但可以通过切换组件来达到相同的效果。

效果

后端

在 Web 后端中,路由可以理解为 URL处理函数 的映射关系。当一个请求从客户端发送到服务器端时,都需要与已定义的路由进行匹配,当匹配成功时将调用对应的处理函数以对客户端的请求进行响应。

路由实现

铺垫

Hash 地址的获取

你可以通过 location.hash 来获取当前页面的 URL 中的 Hash 地址。

举个栗子

  1. 请访问链接 https://cn.bing.com/?mkt=zh-cn#RedHeart
  2. 在访问链接后,打开浏览器控制台并输入 location.hash ,你将观察到如下内容:

输出

组件的生命周期

由于组件的生命周期函数 beforeCreate 执行前,VueJS 已初始化事件。故我们可以在 beforeCreate 生命周期函数执行时设置事件回调函数来监听 URL 中 Hash 地址的变化。
生命周期

实现

子组件

组件的动态切换过程中需要用到以下组件,这三个子组件仅存在颜色样式的区别。

Dodgerblue.vue

<template>
  <div class="box"></div>
</template>

<script>
export default {

}
</script>

<style scoped>
  .box{
    width: 150px;
    height: 150px;
    background-color: dodgerblue;
  }
</style>

Pink.vue

<template>
  <div class="box"></div>
</template>

<script>
export default {

}
</script>

<style scoped>
  .box{
    width: 150px;
    height: 150px;
    background-color: pink;
  }
</style>

YellowGreen.vue

<template>
  <div class="box"></div>
</template>

<script>
export default {

}
</script>

<style scoped>
  .box{
    width: 150px;
    height: 150px;
    background-color: yellowgreen;
  }
</style>
主逻辑

App.vue

<template>
  <div class="container">
    <div class="controller">
      <a href="#Dodgerblue">Dodgerblue</a>
      <a href="#Pink">Pink</a>
      <a href="#YellowGreen">YellowGreen</a>
    </div>
    <!-- 设置动态组件 -->
    <component :is="target"></component>
  </div>
</template>

<script>
// 导入组件
import Dodgerblue from '@/components/Dodgerblue.vue';
import Pink from '@/components/Pink.vue';
import YellowGreen from '@/components/YellowGreen.vue';

export default {
  // 定义数据
  data() {
    return {
      target: 'Dodgerblue'
    }
  },
  // 注册组件
  components: {
    Dodgerblue,
    Pink,
    YellowGreen
  },
  // 使用 beforeCreate 生命周期钩子
  beforeCreate() {
    // 在 Hash 地址发生变化时将执行该回调函数
    window.onhashchange = () => {
      // 与 Hash 地址进行匹配以使用合适的组件
      switch (location.hash){
        case '#Dodgerblue':
          this.target = 'Dodgerblue';
          break;
        case '#Pink':
          this.target = 'Pink';
          break;
        case '#YellowGreen':
          this.target = 'YellowGreen';
          break;
      }
    }
  }
}
</script>

<style scoped>
/* 为超链接添加样式 */
a{
  text-decoration: none;
  display: inline-block;
  width: 100px;
  height: 30px;
  background-color: #f40;
  color: #fff;
  border-radius: 3px;
  margin-right: 5px;
  margin-bottom: 10px;
  text-align: center;
  line-height: 30px;
  font-weight: 600;
  font-size: 13px;
}
</style>

执行结果:

效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryMoon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值