vue-路由(六)

阅读文章你可以收获什么?

1 明白什么是单页应用

2 知道vue中的路由是什么

3 知道如何使用vueRouter这个路由插件

4 知道如何如何封装路由组件

5 知道vue中的声明式导航router-link的用法

6 知道vue中的编程式导航的使用

7 知道声明式导航和编程式导航式如何传递参数的?


单页应用程序-Single Page Applicatio

什么是单页应用程序?

单页面应用(SPA): 所有功能在 一个html页面 上实现

具体示例: 网易云音乐 https://music.163.com/

单页应用程序与多页应用的对比

单页面应用:系统类网站 / 内部网站 / 文档类网站 /移动端站点

多页应用:公司官网 / 电商类网站

路由概念

为什么需要路由

单页面应用程序,之所以开发效率高,性能高,用户体验

最大的原因就是:页面按需更新

要按需更新,首先就需要明确:访问路径 和 组件的对应关系!

访问路径 和 组件的对应关系如何确定呢? 路由 

路由的介绍(要点概念)

生活中的路由:设备和ip的映射关系

Vue中路由路径 和 组件 的 映射 关系 

 如何在vue中使用路由呢?这就需要使用到一个已经封装好的组件VueRouter来实现了

V

VueRouter入门 (路由)

VueRouter 的 介绍

作用:修改地址栏路径时,切换显示匹配的组件

说明:Vue 官方的一个路由插件,是一个第三方包

官网:https://v3.router.vuejs.org/zh/

小知识:

vue2 3 3         解析:vue2使用的路由版本是3开头的,使用的vuex(数据存储仓库)也是3开头的

vue3  4 4        解析:vue3使用的路由版本是4开头的,使用的vuex也是4开头的

VueRouter 的 使用 (5 + 2)

5个基础步骤 (固定)

① 下载: 下载 VueRouter 模块到当前工程,版本3.6.5

npm i vue-router@3.6.5

② 引入

 import VueRouter from 'vue-router'

 ③ 安装注册

Vue.use(VueRouter)

④ 创建路由对象

const router = new VueRouter()

⑤ 注入,将路由对象注入到new Vue实例中,建立 关联

 2 个核心步骤

① 创建需要的组件 (views目录),配置路由规则

② 配置导航,配置路由出口(路径匹配的组件显示的位 置) 

 小结:到这里就完成了路由的基本使用了,但在日常开发中我们一般都会将路由封装起来使用,这样便于管理,后面会详解讲解

1   声明一个index.js文件,里面写了导入路由的相关代码

import Vue from 'vue'
import VueRouter from "vue-router";
import Layout from '@/views/Layout'
import ArticleDetail from '@/views/ArticleDetail'
import Article from '@/views/Article'
import Like from '@/views/Like'
import User from '@/views/User'
import Collect from '@/views/Collect'
Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    // 一级路由
    {
      path: '/' ,
      component: Layout,
      redirect: '/article',
      // 二级路由
      children: [
        {path: '/article' ,component: Article},
        {path: '/like' ,component: Like},
        {path: '/user' ,component: User},
        {path: '/collect' ,component: Collect},
      ]
    },
    {path: '/detail' ,component: ArticleDetail}
  ]
})

export default router

2 将封装的路由注册到mian.js的全局的Vue中

import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  router
}).$mount('#app')

组件目录存放问题

注意:.vue文件 本质无区别。

路由相关的组件,为什么放在 views 目录呢? 组件分类

 

组件分类: .vue文件分2类; 页面组件 & 复用组件         注意:都是 .vue文件 

为什么放在 views 目录呢? 

分类开来 更易维护

  • src/views文件夹

        页面组件 - 页面展示 - 配合路由

  • src/components文件夹

        复用组件 - 展示数据

路由进阶(重点)

① 路由模块封装

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

显示这里不合适的,为了利于后期的维护,我们需要将路由模块封装起来使用

② 声明式导航 (router-link

声明式导航 - 导航链接

需求:实现导航高亮效果

 思考:像图中标签的高亮效果如何实现呢?

显然,像图中的高亮效果,我们以前在学习js时就经常遇见过,使用传统的js的代码也可以实现,但在vue有一种更好的方式去实现它

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

① 能跳转,配置 to 属性指定路径(必须) 。本质还是 a 标签 ,to 无需#

② 能高亮,默认就会提供高亮类名,可以直接设置高亮样式

 导航高亮

为什么这个router-link可以实现高亮呢?

查看代码:我们发现 router-link 自动给当前导航添加了 两个高亮类名

 精确匹配&模糊匹配

 自定义高亮类名

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

声明式导航传参 

1. 查询参数传参

        ① 语法格式如

                to="/path?参数名=值"

        ② 对应页面组件接收传递过来的

                $route.query.参数名

2. 动态路由传参 

        ① 配置动态

        

        ② 配置导航链接 

                to="/path/参数值"

        ③ 对应页面组件接收传递过来的

                $route.params.参数名

两种传参方式的区别 

动态路由参数可选符 

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

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

③ 路由重定向 / 路由404 / 路由模式

路由重定向(redirect)

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

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

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

 路由404

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

位置:配在路由最后

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

效果 

 路由模式

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

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

④ 编程式导航

编程式导航 - 基本跳转

场景:点击按钮跳转如何实现?

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

两种语法:

① path 路径跳转

② name 命名路由跳转

① path 路径跳转 (简易方便)

② name 命名路由跳转 (适合 path 路径长的场景) 

 编程式导航 - 路由传参

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

两种跳转方式,对于两种传参方式都支持:

① path 路径跳转传参

② name 命名路由跳转传参

① path 路径跳转传参

query传参

 接收:

动态路由传参

② name 命名路由跳转传参

query传参

接收:

动态路由传参 

小结:

1. path 路径跳转

2. name 命名路由跳转 

案例:面经基础版 

 组件缓存 keep-alive

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

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

相关文章

【数据结构】18 二叉搜索树(查找,插入,删除)

定义 二叉搜索树也叫二叉排序树或者二叉查找树。它是一种对排序和查找都很有用的特殊二叉树。 一个二叉搜索树可以为空,如果它不为空,它将满足以下性质: 非空左子树的所有键值小于其根节点的键值非空右子树的所有键值都大于其根结点的键值左…

Rust 学习笔记 - 注释全解

前言 和其他编程语言一样,Rust 也提供了代码注释的功能,注释用于解释代码的作用和目的,帮助开发者理解代码的行为,编译器在编译时会忽略它们。 单行注释 单行注释以两个斜杠 (//) 开始,只影响它们后面直到行末的内容…

Java面向对象三大特征之封装

封装的作用和含义: 程序的设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。 编程中封装的具体优点: 提高代…

Days 33 ElfBoard 固定CPU频率

ELF 1开发板选用的是主频800MHz NXP的i.MX6ULL处理器。根据实际的应用场景,如果需要降低CPU功耗,其中一种方法可以将CPU频率固定为节能模式,下面以这款开发板为例给小伙伴们介绍一下固定CPU频率的方法。 先来介绍一下与CPU频率相关的命令&…

关于umi ui图标未显示问题

使用ant design pro 时,安装了umi ui ,安装命令: yarn add umijs/preset-ui -D但是启动项目后,发现没有显示umi ui的图标 找了许多解决方案,发现 umi的版本问题,由于我使用的ant design pro官网最新版本&a…

Quantitative Analysis: PIM Chip Demands for LLAMA-7B inference

1 Architecture 如果将LLAMA-7B模型参数量化为4bit,则存储模型参数需要3.3GB。那么,至少PIM chip 的存储至少要4GB。 AiM单个bank为32MB,单个die 512MB,至少需要8个die的芯片。8个die集成在一个芯片上。 提供816bank级别的访存带…

解决IDEA的Project无法正常显示的问题

一、问题描述 打开IDEA,结果发现项目结构显示有问题: 二、解决办法 File -> Project Structure… -> Project Settings (选Modules),然后导入Module 结果: 补充: IDEA提示“The imported module settings a…

root MUSIC 算法补充说明

root MUSIC 算法补充说明 多项式求根root MUSIC 算法原理如何从 2 M − 2 2M-2 2M−2 个根中确定 K K K 个根从复数域上观察 2 M − 2 2M-2 2M−2 个根的分布 这篇笔记是上一篇关于 root MUSIC 笔记的补充。 多项式求根 要理解 root MUSIC 算法,需要理解多项式求…

面试题-01

1、JDK 和 JRE 和 JVM 分别是什么,有什么区别? JDK(Java Development Kit,Java 软件开发工具包) JDK(Java Development Kit):JDK 是 Java 开发⼯具包,包含了编写、编译…

社区居家养老新选择,全视通智慧方案让长者生活更安心

随着人口老龄化趋势加剧,养老问题已经成为社会各界关注的焦点。我国政府积极采取相关措施,加速推动养老服务业的健康发展。2023年5月,《城市居家适老化改造指导手册》发布,针对城市老年人居家适老化改造需求,提出了47项…

Linux线程(1)--线程的概念 | 线程控制

目录 前置知识 线程的概念 Linux中对线程的理解 重新定义进程与线程 重谈地址空间 线程的优缺点 线程的优点 线程的缺点 线程异常 线程的用途 Linux线程 VS 进程 线程控制 创建线程 线程等待 线程终止 线程ID的深入理解 前置知识 我们知道一个进程有属于自己的P…

python学习24

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

macOS开启HiDPI外接2K显示器(解决字体发虚问题)

1.前言: 购置了一台2K显示器,但通过HDMI直接连接时的显示效果让人难以接受,因此我们需要启用苹果系统的HiDPI模式,以实现更完美的显示效果。 那么,为什么要启用HiDPI模式呢?2K显示器的分辨率为2560*1440&…

数学建模【线性规划】

一、线性规划简介 线性规划通俗讲就是“有限的资源中获取最大的收益”(优化类问题)。而且所有的变量关系式都是线性的,不存在x、指数函数、对数函数、反比例函数、三角函数等。此模型要优化的就是在一组线性约束条件下,求线性目标…

7.1 Qt 中输入行与按钮

目录 前言: 技能: 内容: 参考: 前言: line edit 与pushbotton的一点联动 当输入行有内容时,按钮才能使用,并能读出输入行的内容 技能: pushButton->setEnabled(false) 按钮不…

17.3.2.9 像素处理与内存处理之比较

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 通过第17.3.2.1节到第17.3.2.8节,相信读者对通过锁定内存来处理图像有了一定认识。与第17.3.1节相比较,可以…

【递归】【后续遍历】【迭代】【队列】Leetcode 101 对称二叉树

【递归】【后续遍历】Leetcode 101 对称二叉树 解法一: 递归:后序遍历 左右中解法二: 迭代法,用了单端队列 ---------------🎈🎈对称二叉树 题目链接🎈🎈------------------- 解法一…

项目开发日志(登录界面):2. LoginTitle组件

LoginTitle组件 样式 说明 属性 属性名含义类型是否必填默认值welcomeTitle欢迎标语String是无mainTitle标题String是无 样式 mainColor -> 主题颜色 代码 <template><div class"logintitle-container"><p class"subtitle">{{ welc…

模拟算法.

1.什么是模拟 在信息奥赛中,有一类问题是模拟一个游戏的对弈过程或者模拟一项任务的操作过程.比如乒乓球在比赛中模拟统计记分最终判断输赢的过程等等,这些问题通常很难通过建立数学模型用特定的算法来解决因为它没有一种固定的解法,需要深刻理解出题者对过程的解释一般只能采…

备战蓝桥杯---图论之建图基础

话不多说&#xff0c;直接看题&#xff1a; 首先&#xff0c;这个不是按照字典序的顺序&#xff0c;而是以只要1先做&#xff0c;在满足后让2先做。。。。 就是让数字小的放前面做拓扑排序。 我们可以先做1&#xff0c;看看它的前驱。 举个例子&#xff1a; 我们肯定要把1放…