从入门到实战:vue3路由知识点

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

1.两个知识点

1.路由组件通常存放在pagesviews文件夹,一般组件通常存放在components文件夹。

组件可以分为:

1. 一般组件:亲手写标签出来的

2. 路由组件:靠路由的规则渲染出来的        

比如:

routes:[//一个个的路由规则 
        {
             path:'/home',
             component:Home
        },
        {
            path:'/about',
            component:About
       },
       {
             path:'/news',
             component:News
        },

    ]

遵循vue中的规则:

一般组件放在components文件夹中,路由组件放在pagesviews文件夹


2.通过点击导航,视觉效果上“消失” 了的路由组件,默认是被卸载掉的,需要的时候再去挂载。

比如我在路由组件About中使用生命周期钩子来输出日志信息来观察展示区是如何"消失的"

<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>

 

 

2.路由器工作模式

1.History模式:就像你在浏览器中打开一个新的网页一样。当你在应用程序中切换页面时,URL会更新,但页面不会重新加载。这样的URL看起来更加友好和自然,就像传统的网页链接一样。

 比如:我现在写的博客的网址也是

优点:URL更加美观,不带有#,更接近传统的网站URL

缺点:后期项目上线,需要服务端配合处理路径问题,否则刷新会有404错误。

 

2.Hash模式:就像你在一个长网页中滚动到不同的章节。当你在应用程序中切换页面时,URL会在#符号后面加上一段标识,但浏览器不会发送请求到服务器。这样的URL看起来有点奇怪,但它对于一些特殊的环境(比如旧版浏览器)是有效的。

比如:这段代码的使用

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

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



//第二步:创建路由器

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

    ]
})

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

 

优点:兼容性更好,因为不需要服务器端处理路径。

缺点:URL带有#不太美观,且在SEO优化方面相对较差。

两者的应用场景:

如果你的应用程序主要在现代浏览器中运行,并且你希望URL看起来更加友好和自然,那么可以选择使用history模式。如果你需要在旧版浏览器中兼容,或者你的应用程序是一个单页应用(SPA),可以选择使用hash模式。


3.to的两者写法

在用于生成导航链接的标签<router-link>组件中to的两种常见使用方式,分别是字符串写法和对象写法。

<!-- 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>

第一种:to的字符串写法

 

 第二种:to的对象写法

两者的区别:

使用字符串写法时,你可以直接将目标路由的路径作为字符串传递给to属性,例如to="/home"

使用对象写法时,你可以通过一个对象来指定目标路由的各种属性,例如{ path: '/home' }。除了path属性,你还可以在对象中指定其他路由属性,如nameparamsquery等,以满足更复杂的路由导航需求。

4.命名路由

作用:可以简化路由跳转及传参。

routes:[
  {
    name:'zhuye',
    path:'/home',
    component:Home
  },
  {
    name:'xinwen',
    path:'/news',
    component:News,
  },
  {
    name:'guanyu',
    path:'/about',
    component:About
  }

 跳转路由:

<!--简化前:需要写完整的路径(to的字符串写法) -->
<router-link to="/news/detail">跳转</router-link>
<!--简化后:直接通过名字跳转(to的对象写法配合name属性) -->
<router-link :to="{name:'guanyu'}">跳转</router-link>

5.嵌套路由

我们在关于新闻的组件中可以再嵌套一个子路由,用来展示不同新闻的不同详情。

此时,新闻的标题成为导航区,点击后详情出现展示区内。

 

下面是嵌套路由的步骤:

 

1.编写News的子路由:Detail.vue组件

代码如下:

<template>
    <ul class="news-list">
      <li>编号:xxx</li>
      <li>标题:xxx</li>
      <li>内容:xxx</li>
    </ul>
  </template>
  
  <script setup lang="ts" name="About">
  
  </script>
  
  <style scoped>
    .news-list {
      list-style: none;
      padding-left: 20px;
    }
  
    .news-list>li {
      line-height: 30px;
    }
  </style>

 2.在index.ts文件配置路由规则,使用children配置项:

 

代码如下:

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

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

// 第二步:创建路由器
const router = createRouter({
  history:createWebHistory(), //路由器的工作模式(稍后讲解)
  routes:[ //一个一个的路由规则
    {
      name:'zhuye',
      path:'/home',
      component:Home
    },
    {
      name:'xinwen',
      path:'/news',
      component:News,
      children:[
        {
          path:'detail',
          component:Detail
        }
      ]
    },
    {
      name:'guanyu',
      path:'/about',
      component:About
    },
  ]
})

// 暴露出去router
export default router

3.在关于新闻的"News"组件添加子路

注意: 

在新闻的导航区里面,再写入展示区div 

 

代码如下:

<template>
  <div class="news">
    <!-- 导航区 -->
    <ul>
      <li v-for="news in newsList" :key="news.id">
        <RouterLink to="/news/detail">{{news.title}}</RouterLink>
      </li>
    </ul>
    <!-- 展示区 -->
    <div class="news-content">
      <RouterView></RouterView>
    </div>
  </div>
</template>

<script setup lang="ts" name="News">
  import {reactive} from 'vue'
  import {RouterView,RouterLink} from 'vue-router'

  const newsList = reactive([
    {id:'title01',title:'很好的抗癌食物',content:'西篮花'},
    {id:'title02',title:'如何一夜暴富',content:'学IT'},
    {id:'title03',title:'震惊,万万没想到',content:'明天是周一'},
    {id:'title04',title:'好消息!好消息!',content:'快过年了'}
  ])

</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>

 展示:

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端面试3+1】08 css选择器、在前端页面展示后端传来的图片数组、请求方法的常见类型、【搜索插入位置】

一、css选择器有哪些&#xff1f; 1.元素选择器&#xff1a; 通过元素名称选择元素。 示例&#xff1a;p 选择所有段落元素。 2.类选择器&#xff1a; 通过类名选择元素。 示例&#xff1a;.btn 选择所有类名为 btn 的元素。 3.ID选择器&#xff1a; 通过id属性选择元素。 示例…

CCIE-02-PPPoE

目录 实验条件网络拓朴实验目标 开始配置R1验证效果 实验条件 网络拓朴 实验目标 R2为PPPoE Server&#xff0c;已预配了相关信息&#xff1b;R1作为PPPoE Client&#xff0c;进行PPPoE拨号 用户名为R1&#xff0c;密码为cisco &#xff0c; 采用CHAP的认证方式&#xff0c;I…

Python入门(八)

引入 引入函数 为了减少代码的冗余&#xff0c;减轻我们的工作量&#xff0c;我们常常将代码分块编写&#xff0c;在Python中更是如此&#xff0c;那么我们怎么在一个新的程序文件中调用我们已经编写好程序文件的函数&#xff0c;我们使用import。我们先写一个first.py为例语…

【MySQL】一文带你搞定 外键约束&其【更新/删除行为】(可cv代码&案例演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

新生报到系统的设计与实现(论文+源码)_kaic

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对新生报到信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

突发: xz-utils 被注入后门 (CVE-2024-3094)

Andres Freund 在 2024 年 3 月 29 日发现了一个在 xz-utils 注入的后门&#xff1b;使用了 xz/lzma 5.6.0 / 5.6.1 的项目皆受影响。 杀伤力: 当前还未完全清楚&#xff1b;但 openssh 的 sshd 首当其冲&#xff1b;注入的代码会 Hook OpenSSH 的 RSA_public_decrypt 函数&a…

第四百三十六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"不同平台上换行的问题"相关的内容&#xff0c;本章回中将介绍如何在页面上显示蒙板层.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

[中级]软考_软件设计_计算机组成与体系结构_04_寻址地址

寻址地址 概念指令的概念 寻址方式立即寻址方式直接寻址方式间接寻址方式寄存器寻址方式寄存器间接寻址方式往年真题 概念 指令的概念 一条指令就是机器语言的一个语句&#xff0c;它是一组有意义的二进制代码&#xff0c;指令的基本格式如下&#xff1a; 操作码字段地址码字…

SAP 未清销售订单的取值

每个公司都会有自己的销售报表&#xff0c; 一般来说VA05的都满足不了客户的定制化需求。 所以都要进行自定义报表的开发&#xff0c; 在开发的过程中&#xff0c;也会有未清销售订单和已清销售订单的区分 一开始我的想法是&#xff0c;根据销售订单去找交货单累计已交货的…

面向对象程序之多态

1.多态的概念 简单来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;不同的对象去完成会有不同的形态。 举个例子&#xff1a;对于动物&#xff0c;他们吃的都是食物&#xff0c;但狗吃的是狗粮&#xff0c;猫吃的是猫粮&#xff0c;去完成吃这个…

lua脚本在redis集群中哈希槽分片问题

上文说到&#xff0c;通过用redis lua脚本实现时间窗分布式限流 可以操作redis lua脚本来实现时间窗限流&#xff0c;在执行lua脚本的时候&#xff0c;参数中有个keys列表&#xff0c;当lua脚本中如果有操作多个key的情况&#xff0c;就可以传个key列表了。通常情况下&#xff…

Java封装最佳实践:打造高内聚、低耦合的优雅代码~

​ 个人主页&#xff1a;秋风起&#xff0c;再归来~ 文章专栏&#xff1a;javaSE的修炼之路 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 1、封装 1.1 封装的概念 面向对象程序三大…

python练习二

# Demo85def pai_xu(ls_test):#创建一个列表排序函数命名为pai_xu# 对创建的函数进行注释"""这是一个关于列表正序/倒序排列的函数:param ls_test: 需要排序的列表:return:"""ls1 [int(ls_test[i]) for i in range(len(ls_test))]#对input输入的…

surfer绘制等值线图

surfer介绍 Surfer软件&#xff0c;是美国Golden Software公司编制的一款以画三维图的软件。该软件具有强大的插值功能和绘制图件能力&#xff0c;可用来处理XYZ数据&#xff0c;是地质工作者常用的专业成图软件&#xff08;来源于百度百科&#xff09;。 surfer可以用来绘制…

计算机网络—TCP协议详解:特性、应用(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 3:34 &#x1f504; ◀️…

Java中常见的锁策略

目录 乐观锁 vs 悲观锁 悲观锁: 乐观锁&#xff1a; 重量级锁 vs 轻量级锁 ⾃旋锁&#xff08;Spin Lock&#xff09; 公平锁 vs 非公平锁 可重⼊锁 vs 不可重入锁 读写锁 乐观锁 vs 悲观锁 悲观锁: 总是假设最坏的情况&#xff0c;每次去拿数据的时候都认为别…

3d整体模型怎么拆图---模大狮模型网

3D整体模型怎么拆图 一、模型准备 在进行3D整体模型的拆图之前&#xff0c;首先需要确保模型的构造清晰明了&#xff0c;各个部件之间的连接关系明确&#xff0c;并且模型的层级结构已经建立完成。 二、确定拆图方式 拆解方向&#xff1a;根据模型的结构和设计需求&#xff…

教你用Fiddler捕获HTTPS请求

安装Fiddler 这里不特别说明了&#xff0c;网上搜索一大把&#xff0c;根据安装引导一步步安装即可。&#xff08;这里采用的是fiddler v4.6&#xff09; 配置Fiddler 1、打开fiddler配置Tools –>Telerik Fiddler Options。 2、打开HTTPS配置项&#xff0c;勾选“Captur…

Leetcode-2580-统计将重叠区间合并成组的方案数-c++

题目详见https://leetcode.cn/problems/count-ways-to-group-overlapping-ranges/ 题目要求将最后的ranges分为两个组。也就是说当你的ranges已经满足题目要求的时候&#xff0c;这两个组怎么分是随意的&#xff0c;这里也就引出了 2 k 2^k 2k 的由来&#xff0c;其实就是每组…

Leetcode-2810-故障键盘-c++

题目详见https://leetcode.cn/problems/faulty-keyboard/ 题解 这道题的关键是如何合理地使用STL&#xff0c;毕竟是一道简单题。 之前常用到的Vector容器是单向开口的连续内存空间 deque则是一种双向开口的连续线性空间&#xff0c;又称双端动态数组。所谓的双向开口&#x…