Vue3:快速上手路由器

news2024/11/30 3:48:37

本人在B站上关于vue3的尚硅谷的课程,以下是整理一些笔记。

一.路由器和路由的概念

在 Vue 3 中,路由(Router)和路由器(Router)是两个相关但不同的概念。

1. 路由(Router):
路由是指定义在 Vue 应用程序中的不同页面或视图之间的映射关系。每个路由对应着一个特定的 URL,当用户在应用程序中导航到不同的 URL 时,路由会告诉 Vue 哪个组件应该渲染到页面上。路由定义了应用程序的不同页面状态和导航逻辑。

2. 路由器(Router):
   路由器是一个 Vue 插件,它提供了在应用程序中使用路由的功能。Vue Router 是 Vue 官方提供的路由器实现,它允许你在 Vue 应用程序中构建 SPA(单页应用程序)并进行客户端路由。路由器负责解析 URL,根据路由配置将不同的组件渲染到正确的位置,并处理应用程序的导航。

通俗点解释:

路由器就像是一个导航系统,负责根据不同的网址告诉网站要显示哪个页面。它会监听浏览器的地址栏变化,一旦检测到地址发生改变,就会根据配置的路由规则找到对应的页面,并将其渲染到浏览器中。

总结来说,路由就是网站的不同页面,而路由器就是负责管理这些页面的工具。路由器根据地址栏中的网址来确定要显示的页面,并确保正确地加载和切换页面内容。
 

 

(该图来源尚硅谷) 

 一个路由器有多个路由:

(下图只是举例子解释,不是这种路由器)

二.制定导航区,展示区。

1.在src文件中定义components文件夹

2.在此文件夹定义三个组件:About.vue,Home.vue,News.vue

Header.vue只是起一个标题的作用,没有也可以。

 

以下是组件的源码: 

 About.vue

<template>
    <div class="about">
      <h2>大家好,欢迎来到小李同学的博客</h2>
    </div>
  </template>
  
  <script setup lang="ts" name="About">
    import {onMounted,onUnmounted} from 'vue'
  
    onMounted(()=>{
      console.log('About组件挂载了')
    })
    onUnmounted(()=>{
      console.log('About组件卸载了')
    })
  </script>
  
  <style scoped>
  .about {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100%;
    color: rgb(85, 84, 84);
    font-size: 18px;
  }
  </style>

Home.vue 

<template>
    <div class="home">
      <img src="http://www.atguigu.com/images/index_new/logo.png" alt="">
    </div>
  </template>
  
  <script setup lang="ts" name="Home">
  
  </script>
  
  <style scoped>
    .home {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100%;
    }
  </style>

 


News.vue 

<template>
    <div class="news">
      <ul>
        <li><a href="#">新闻001</a></li>
        <li><a href="#">新闻002</a></li>
        <li><a href="#">新闻003</a></li>
        <li><a href="#">新闻004</a></li>
      </ul>
    </div>
  </template>
  
  <script setup lang="ts" name="News">
    
  </script>
  
  <style scoped>
  /* 新闻 */
  .news {
    padding: 0 20px;
    display: flex;
    justify-content: space-between;
    height: 100%;
  }
  .news ul {
    margin-top: 30px;
    list-style: none;
    padding-left: 10px;
  }
  .news li>a {
    font-size: 18px;
    line-height: 40px;
    text-decoration: none;
    color: #64967E;
    text-shadow: 0 0 1px rgb(0, 84, 0);
  }
  .news-content {
    width: 70%;
    height: 90%;
    border: 1px solid;
    margin-top: 20px;
    border-radius: 10px;
  }
  </style>

 Header.vue

<template>
    <h2 class="title">Vue路由测试</h2>
  </template>
  
  <script setup lang="ts" name="Header">
    
  </script>
  
  <style scoped>
    .title {
      text-align: center;
      word-spacing: 5px;
      margin: 30px 0;
      height: 70px;
      line-height: 70px;
      background-image: linear-gradient(45deg, gray, white);
      border-radius: 10px;
      box-shadow: 0 0 2px;
      font-size: 30px;
    }
  </style>

 

三.制定路由器

1.在src文件中新建好router(路由器)文件夹

2.在文件夹中建立index.ts文件

3.在index.ts文件里面制定路由规则

index.ts

//创建一个路由器并暴露出去

//第一步:引入creatRouter
import{createRouter,createWebHistory} from'vue-router'
//引入一个一个可能要呈现的组件
import Home from '@/components/Home.vue'
import About from '@/components/About.vue'
import News from '@/components/News.vue'



//第二步:创建路由器

const router = createRouter({
    history:createWebHistory(),//路由器的工作模式
    routes:[//一个个的路由规则 
        {
             path:'/home',
             component:Home
        },
        {
            path:'/about',
            component:About
       },
       {
             path:'/news',
             component:News
        },

    ]
})

export default router//定义好后暴露出去router

createRouter:

 Vue Router 提供的一个函数,用于创建路由器实例。

 createWebHistory:

 createWebHistory 是一个用于创建基于 HTML5 History 模式的路由历史记录管理器的函数,它在 Vue Router 中用于配置路由器的工作模式。

代码解析:

  1. 引入了 createRouter 和 createWebHistory 方法,这两个方法是从 vue-router 包中导入的。这些方法将用于创建路由器实例和指定路由器的工作模式。

  2. 引入要呈现的组件,包括 HomeAbout 和 News 组件。这些组件将在不同的路由下进行渲染。

  3. 使用 createRouter 方法创建了一个路由器实例,并传入了一个配置对象作为参数。配置对象中的 history 属性使用了 createWebHistory()

  4. 在配置对象的 routes 属性中,定义一系列的路由规则。每个路由规则都是一个对象,包含了 path 和 component 属性。path 表示要匹配的 URL 路径,component 表示该路由对应的组件。

  5. 最后,通过 export default router 将定义好的路由器实例暴露出去,以便在其他地方使用。(一定要暴露,否则等于没写)

 

 四.路由器在App.vue组件中使用        

<!-- App.vue 有三种标签,html(结构标签) ,script(交互标签) ,style(样式,用于好看) -->

<template>
   <div class = 'app'>
      
      <Header/>
      <!-- 导航区 -->
      <div class = 'navigate'>
         <RouterLink to = '/home'active-class="active" >首页</RouterLink>
         <RouterLink to = '/news'active-class="active" >新闻</RouterLink>
         <RouterLink to = '/about'active-class="active " >关于</RouterLink>
      </div>
      <!-- 展示区 -->
      <div class = 'main-content'>
            <RouterView></RouterView>
      </div>
   </div>
  
</template>

<script lang="ts" setup name = "App">

import { RouterView,RouterLink} from 'vue-router'; 
import Header from './components/Header.vue'

</script>
<style>
    /* App */
  .navigate {
    display: flex;
    justify-content: space-around;
    margin: 0 100px;
  }
  
  .navigate a {
    display: block;
    text-align: center;
    width: 90px;
    height: 40px;
    line-height: 40px;
    border-radius: 10px;
    background-color: gray;
    text-decoration: none;
    color: white;
    font-size: 18px;
    letter-spacing: 5px;
  }
  .navigate a.active {
    background-color: #64967E;
    color: #ffc268;
    font-weight: 900;
    text-shadow: 0 0 1px black;
    font-family: 微软雅黑;
  }
  .main-content {
    margin: 0 auto;
    margin-top: 30px;
    border-radius: 10px;
    width: 90%;
    height: 400px;
    border: 1px solid;
  }
</style>

<RouterView>:

 组件是 Vue Router 提供的一个用于动态渲染路由组件的组件。

例如,当路由路径为 /home 时,路由器配置中定义的路由规则,将 Home 组件渲染到 <div class="main-content"> 内部。同样的,当路由路径为 /news 时,会渲染 News 组件,当路由路径为 /about 时,会渲染 About 组件。

 active-class:

通过 <RouterLink>,你可以在应用程序中创建导航链接,使用户能够点击链接并导航到不同的路由。

代码解析:

<template>标签用于定义组件的结构部分,也就是 HTML 部分。在这个例子中,<template> 中包含了整个组件的结构,包括一个 div 元素作为根容器,其中包含了一个名为 Header 的组件、导航区域和展示区域。

<script>标签用于定义组件的交互部分,也就是 JavaScript 部分。在这个例子中,<script>中使用了 import语句引入了 RouterView 和 RouterLink 组件,这是来自 Vue Router 的组件。同时,还引入了一个名为 Header的组件。

<style>标签用于定义组件的样式部分,也就是 CSS 部分。在这个例子中,<style> 中定义了一些样式规则,包括导航区域和展示区域的样式。

五.展示路由

在导航区点击首页,路由器会找到/home的路由,并把它渲染到展示区。

在导航区点击新闻,路由器会找到/news的路由,并把它渲染到展示区。 

 在导航区点击关于,路由器会找到/about的路由,并把它渲染到展示区。

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

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

相关文章

基于SpringBoot的“游戏分享网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“游戏分享网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 网站首页界面图 用户注册界面图 …

基于SpringBoot和Vue的房产销售系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的房产销售系统的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&#x1f…

提取gdip-yolo与ia-seg中的图像自适应模块进行图像去雾与亮度增强

gdip-yolo与ia-seg都是一种将图像自适应模块插入模型前面,从而提升模型在特定数据下检测能力的网络结构。gdip-yolo提出了gdip模块,可以应用到大雾数据与低亮度数据(夜晚环境),然后用于目标检测训练;ia-seg将ia-yolo中的代码修改了一下修车了ipam模块,应用到低亮度数据(…

最优算法100例之13-输出第n个丑数

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当…

如何使用命令行对RK开发板进行OpenHarmony版本烧录?

问题 在 OpenHarmony 自动化测试环境中&#xff0c;需要对流水线上的 RK 设备进行烧录&#xff0c;图形工具只能人工操作&#xff0c;那么有什么方法可以纯命令行进行自动化烧录呢&#xff1f; 思路 我们发现 RK 开发板实际是使用 upgrade_tool 的执行文件进行烧录的&#x…

Jenkins详细安装配置部署

目录 简介一、安装jdk二、安装jenkins这里如果熟悉 Jenkins &#xff0c;可以【选择插件来安装】&#xff0c;如果不熟悉&#xff0c;还是按照推荐来吧。注意&#xff1a; 三、插件安装如果上面插件安装&#xff0c;选择的不是【安装推荐的插件】&#xff0c;而是【选择插件来安…

JavaSE——面向对象高级三(4/5)-认识泛型、定义泛型类、定义泛型接口

目录 认识泛型 定义泛型类 定义泛型接口 认识泛型 泛型 定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff08;如&#xff1a;<E>&#xff09;&#xff0c;称为泛型类、泛型接口、泛型方法、它们统称为泛型。 public class ArrayList<E>…

接雨水(C语言)

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 首先我们要明白要形成容器&#xff0c;接雨水 需要右边的柱子高于本身&#xff0c;并且需保证左方有高于本身的柱子 也就是这样&#xff0c;才会形成容器 这道题的解法之一是单调栈&#xff0c;并且需保证是递…

MySQL的InnoDB引擎的事务原理以及MVCC

目录 一、事务原理 二、redo log 三、undo log 四、MVCC 1.基础概念 2.隐藏字段 3.undolog 4.readview 5.原理分析 一、事务原理 1). 事务 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作…

k8s下搭建redis集群

记录一下近期实现的在k8s上搭建redis集群的过程 1、新建存储类 主要是为了和其它服务的存储类区分一下 redis-beta-storage 2、编写configMap redis启动时从configMap中读取配置 bind&#xff1a;默认的127.0.0.1可能会导致其它ip地址无法远程访问&#xff0c;因此修改为0.0…

【软件工程导论】——Visio与StarUML的安装

目录 &#x1f552; 1. Visio&#x1f552; 2. StarUML &#x1f552; 1. Visio 1、下载Office Tool Plus并安装&#xff1a;&#x1f50e; Office Tool Plus官网 2、打开软件 → 部署 → 添加产品 3、这里我选择Visio 2021 专业版 LTSC&#xff0c;确定&#xff0c;随后点击“…

【RedHat】使用cron安排周期性任务——周期性创建用户实例

cron用来管理周期性重复执行的任务调度&#xff0c;非常适合日常系统维护工作。计划任务分为系统的计划任务和用户自定义的计划任务。 cron服务每分钟都检查/etc/crontab文件、/etc/cron.d目录和/var/spool/cron目录中的变化。/var/spool/cron目录下的任务需要通过crontab -e 命…

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

MSTP环路避免实验(思科)

华为设备参考&#xff1a;MSTP环路避免实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 MSTP&#xff08;多生成树协议&#xff09;&#xff0c;MSTP解决了STP和RSTP没有考虑vlan的问题&#xff0c;STP和RSTP将所有的vlan共享为一个生成树实例&#xff0c;无法实现…

如何备考2024年AMC10:吃透2000-2023年1250道真题(限时免费送)

有家长朋友问&#xff0c;有没有适合初中学生参加的奥数类比赛&#xff1f;我推荐AMC10美国数学竞赛&#xff0c;在国内可以方便地参加&#xff0c;而且每年全国各省市参加的初中生越来越多。关于AMC10详细的介绍和常见问题解答&#xff0c;可以联系我获得。 那么如何在AMC10竞…

基恩士数码显微镜数据采集项目经验分享

在最近的项目中&#xff0c;我有幸参与了基恩士数码显微镜的开发与数据采集工作。这次的经历让我对科学研究中的数据收集和分析有了更深入的了解&#xff0c;我分享我在项目中的角色以及我们所取得的成果。 作为一个科研工作者&#xff0c;我始终被数字化技术在科学研究中的作用…

消息队列经典应用场景

笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。 在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章,笔者结合自己的真实经历,和大家分享消息队列的七种经典应用场景。 1 异步&解耦 笔者曾经负责某电…

开源AI引擎:利用影像处理与目标检测技术对违章建筑排查

一、项目案例介绍 随着城市化进程的加快&#xff0c;城市规划和管理工作面临着前所未有的挑战&#xff0c;违章建筑的排查与处理成为了城市管理中的一项重要任务。传统的违章建筑排查方法依赖于人力巡查&#xff0c;效率低下且难以全面覆盖。为了解决这一问题&#xff0c;现代…

【Win】使用PowerShell和Webhooks轻松发送消息至Microsoft Teams

Microsoft Teams是一款由微软开发的团队协作和通讯工具。如果您对这个名字还不太熟悉&#xff0c;那么现在就是一个了解它的好时机。微软将Teams定位为其之前Skype for Business解决方案的继任者&#xff0c;并且它也提供了与其他基于频道的通讯应用程序&#xff08;例如Slack、…

HarmonyOs开发:轮播图Banner组件封装与使用

前言 轮播图在每个项目中都很常见&#xff0c;鸿蒙中在容器组件中也提供了Swiper组件&#xff0c;用于子组件滑动轮播显示&#xff0c;和前端的使用起来也是异曲同工&#xff0c;我们先看下基本的用法。 Swiper() {ForEach(["1", "2", "3", &quo…