Vue的学习(5)

1.路由进阶

1.路由模块封装

  • 路由的封装抽离
  • 问题:所有的路由配置都堆在main.js中合适么?
  • 目标:将路由模块抽离出来。 好处:拆分模块,利于维护

  • 小结:

  • 路由模块的封装抽离的好处是什么?
  •   拆分模块,利于维护
  • 以后如何快速引入组件?
  •   基于 @ 指代 src 目录,从 src 目录出发找组件

声明式导航 - 导航链接

需求:实现导航高亮效果

  • vue-router 提供了一个全局组件 router-link (取代 a 标签)
  • ① 能跳转,配置 to 属性指定路径(必须) 。本质还是 a 标签 ,to 无需 #
  • ② 能高亮,默认就会提供高亮类名,可以直接设置高亮样式

  • 小结:

  • 1. router-link是什么?
  • vue-router提供的全局组件, 用于替换 a 标签
  • 2. router-link怎么用?
  • <router-link to="/路径值" ></router-link>
  • 必须传入to属性, 指定路由路径值
  • 3. router-link好处?
  • 能跳转,能高亮 (自带激活时的类名)

声明式导航 - 两个类名

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

  • ① router-link-active 模糊匹配 (用的多)
  •   to="/my" 可以匹配 /my /my/a /my/b ....
  • ② router-link-exact-active 精确匹配
  •   to="/my" 仅可以匹配 /my

  • 小结:

  • router-link 会自动给当前导航添加两个类名,有什么区别呢?
  • router-link-active 模糊匹配 (用的多)
  • router-link-exact-active 精确匹配

声明式导航 - 两个类名

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

const router = new VueRouter({

routes:[......]

linkActiveClass: " 类名1 ",
linkExactActiveClass: " 类名2 "

}) 

  • 小结:

  • 如何自定义 router-link 的 两个高亮类名
  • linkActiveClass 模糊匹配 类名自定义
  • linkExactActiveClass 精确匹配 类名自定义

声明式导航 - 跳转传参

  • 1. 查询参数传参
  • 2. 动态路由传参

  • 目标:在跳转路由时, 进行传值
  • 1. 查询参数传参
  • 2. 动态路由传参
1. 查询参数传参
  • ① 语法格式如下
  •  to="/path?参数名=值"
  • ② 对应页面组件接收传递过来的值
  • $route.query.参数名

2. 动态路由传参

  • ① 配置动态路由
const router = new VueRouter({
routes: [...,{path: '/search/:words',component: Search}]
})
② 配置导航链接
l to="/path /参数值 "
③ 对应页面组件接收传递过来的值
l $route. params.参数名

  • 两种传参方式的区别

  • 1. 查询参数传参 (比较适合传多个参数)
  • ① 跳转:to="/path?参数名=值&参数名2=值"
  • ② 获取:$route.query.参数名
  • 2. 动态路由传参 (优雅简洁,传单个参数比较方便)
  • ① 配置动态路由:path: "/path/参数名"
  • ② 跳转:to="/path/参数值"
  • ③ 获取:$route.params.参数名

  • 小结:

  • 声明式导航跳转时, 有几种方式传值给路由页面?
  • ① 查询参数传参 (多个参数)
  • 跳转:to="/path?参数名=值"
  • 接收:$route.query.参数名
  • ② 动态路由传参 (简洁优雅)
  • 路由: /path/:参数名
  • 跳转: to="/path/值"
  • 接收:$route.params.参数名

动态路由参数可选符

问题: 配了路由 path: "/search/:words" 为什么按下面步骤操作,会未匹配到组件,显示空白?
动态路由参数可选符
原因: /search/:words 表示,必须要传参数。如果不传参数,也希望匹配,可以加个可选符 "?"
const router = new VueRouter({
routes: [{ path: '/', redirect: '/home' },{ path: '/home', component: Home },{ path: '/search/:words?', component: Search }]
})

Vue路由 - 404

  • 作用:当路径找不到匹配时,给个提示页面
  • 位置:配在路由最后
  • 语法:path: "*" (任意路径) – 前面不匹配就命中最后这个

import NotFind from '@/views/NotFind'
const router = new VueRouter({
routes: [{ path: '/', redirect: '/home' },{ path: '/home', component: Home },{ path: '/search/:words?', component: Search },{ path: '*', component: NotFind }]
})

Vue路由 - 模式设置

  • 问题: 路由的路径看起来不自然, 有#,能否切成真正路径形式?
  •  hash路由(默认) 例如: http://localhost:8080/#/home
  • history路由(常用) 例如: http://localhost:8080/home (以后上线需要服务器端支持)

编程式导航 - 基本跳转

  • 编程式导航:用JS代码来进行跳转
  • 两种语法:
  • ① path 路径跳转
  • ② name 命名路由跳转

① path 路径跳转 (简易方便)
this.$router.push('路由路径')
this.$router.push({
path: '路由路径'
})
② name 命名路由跳转 (适合 path 路径长的场景)

this.$router.push({
name: '路由名'
})
{ name: '路由名', path: '/path/xxx', component: XXX },

  • 小结:

  • 编程式导航有几种跳转方式 ?
  • ① 通过路径跳转 (简易方便)
this . $router . push ( ' 路由路径 ' )
this . $router . push ({
path: ' 路由路径 '
})
  • ② 通过路由名字跳转 (适合路径名字长的场景)
this . $router . push ({
name: ' 路由名 '
})
{ name: ' 路由名 ' , path: '/path/xxx' , ... },

编程式导航 - 路由传参

  • 问题:点击搜索按钮,跳转需要传参如何实现?
  • 两种传参方式:查询参数 + 动态路由传参
  • 两种跳转方式,对于两种传参方式都支持:
  • ① path 路径跳转传参 (query传参)
  • ② name 命名路由跳转传参
this.$router.push('/路径?参数名1=参数值1&参数2=参数值2')
this.$router.push({path: '/路径',query: {参数名1: '参数值1',参数名2: '参数值2'}})

  • ① path 路径跳转传参 (动态路由传参)
  • ② name 命名路由跳转传参
this.$router.push('/路径/参数值')
this.$router.push({path: '/路径/参数值'})

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

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

小结:

  • 编程式导航,如何跳转传参 ?
  • 1. path 路径跳转
  • ① query传参
this . $router . push ( '/ 路径 ? 参数名 1= 参数值 1& 参数 2= 参数值 2' )
this . $router . push ({
path: '/ 路径 ' ,
query: {
参数名 1: ' 参数值 1' ,
参数名 2: ' 参数值 2'
}
})
  • ② 动态路由传参 (需要配动态路由)
this . $router . push ( '/ 路径 / 参数值 ' )
this . $router . push ({
path: '/ 路径 / 参数值 '
})

  • 编程式导航,如何跳转传参 ?
  • 2. name 命名路由跳转
  • ① query传参
this . $router . push ({
name:
' 路由名字 ' ,
query: {
参数名 1: ' 参数值 1' ,
参数名 2: ' 参数值 2'
}
})
  • ② 动态路由传参 (需要配动态路由)
this . $router . push ({
name: ' 路由名字 ' ,
params: {
参数名 : ' 参数值 ' ,
}
})

组件缓存 keep-alive

  • 问题:从面经 点到 详情页,又点返回,数据重新加载了 → 希望回到原来的位置
  • 原因:路由跳转后,组件被销毁了,返回回来组件又被重建了,所以数据重新被加载了
  • 解决:利用 keep-alive 将组件缓存下来

  • 1. keep-alive是什么

  • keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
  • keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。
  • 2. keep-alive的优点

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

< template >
< div class = "h5-wrapper" >
< keep-alive >
< router-view ></ router-view >
</ keep-alive >
</ div >
</ template >
问题:缓存了所有被切换的组件

  • 3. keep-alive的三个属性

  • ① include : 组件名数组,只有匹配的组件会被缓存
  • ② exclude : 组件名数组,任何匹配的组件都不会被缓存
  • ③ max : 最多可以缓存多少组件实例
< template >
< div class = "h5-wrapper" : include ="[ 'LayoutPage' ] >
< keep-alive >
< router-view ></ router-view >
</ keep-alive >
</ div >
</ template >

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

  • activated 当组件被激活(使用)的时候触发 → 进入这个页面的时候触发
  • deactivated 当组件不被使用的时候触发 → 离开这个页面的时候触发
  • 组件缓存后就不会执行组件的created, mounted, destroyed 等钩子了
  • 所以其提供了actived deactived钩子,帮我们实现业务需求。
activated () {
console . log ( 'actived 激活 进入页面 ' );
},
deactivated () {
console . log ( 'deactived 失活 离开页面 ' );
}

  • 小结:

  • 1. keep-alive是什么
  •   Vue 的内置组件,包裹动态组件时,可以缓存
  • 2. keep-alive的优点
  •    组件切换过程中 把切换出去的组件保留在内存中(提升性能)
  • 3. keep-alive的三个属性 (了解)
  •    ① include : 组件名数组,只有匹配的组件会被缓存
  •    ② exclude : 组件名数组,任何匹配的组件都不会被缓存
  •    ③ max : 最多可以缓存多少组件实例
  • 4. keep-alive的使用会触发两个生命周期函数 (了解)
  •    activated 当组件被激活(使用)的时候触发 → 进入页面触发
  •    deactivated 当组件不被使用的时候触发 → 离开页面触发

  • 总结:

  • 1. 项目案例实现的基本步骤分哪两大步?
  •    ① 配路由 ② 实现页面功能
  • 2. 嵌套路由的关键配置项是什么?
  •     children
  • 3. 路由传参两种方式?
  •    ① 查询参数传参,$route.query.参数名 (适合多个参数)
  •    ② 动态路由传参,$route.params.参数名 (更简洁直观)
  • 4. 缓存组件可以用哪个内置组件?
  •     keep-alive
  •     三个属性: include exclude max
  •     两个钩子: activated deactivated

自定义创建项目

ESlint 代码规范

目标:认识代码规范
  • 代码规范:一套写代码的约定规则。例如:"赋值符号的左右是否需要空格" "一句结束是否是要加;" ...
  • 老话说:"没有规矩不成方圆" → 正规的团队 需要 统一的编码风格
  • JavaScript Standard Style 规范说明 https://standardjs.com/rules-zhcn.html
  • 下面是这份规则中的一小部分:
  • 字符串使用单引号 'abc'
  • 无分号 const name = 'zs'
  • 关键字后加空格 if (name = 'ls') { ... }
  • 函数名后加空格 function name (arg) { ... }
  • l坚持使用全等 === 摒弃 ==

代码规范错误

  • 目标:学会解决代码规范错误
  • 如果你的代码不符合 standard 的要求,ESlint 会跳出来刀子嘴,豆腐心地提示你。
  • 比如:在main.js中随意做一些改动,添加一些分号,空行。

  • 两种解决方案:
  • ① 手动修正
  •    基于 vscode 插件 ESLint 高亮错误,并通过配置 自动 帮助我们修复错误。
  •    根据错误提示来一项一项手动修改纠正。
  • ② 自动修正
  •     如果你不认识命令行中的语法报错是什么意思,根据错误代码去 [ESLint 规则表] 中查找其      具体含义。

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

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

相关文章

设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能

在科技飞速发展的当下&#xff0c;我们的生活正被各类智能设备悄然改变&#xff0c;它们如同一位位无声的助手&#xff0c;渗透到我们生活的每一个角落&#xff0c;让生活变得更加便捷和丰富多彩。 智能插座、智能照明和简单家电设备在家居领域的应用&#xff0c;为我们的生活…

Excel大数据量导入导出

github源码 地址&#xff08;更详细&#xff09; : https://github.com/alibaba/easyexcel 文档&#xff1a;读Excel&#xff08;文档已经迁移&#xff09; B 站视频 : https://www.bilibili.com/video/BV1Ff4y1U7Qc 一、JAVA解析EXCEL工具EasyExcel Java解析、生成Excel比较…

Java基础知识总结(四十八)--TCP传输、TCP客户端、TCP服务端

**TCP传输&#xff1a;**两个端点的建立连接后会有一个传输数据的通道&#xff0c;这通道称为流&#xff0c;而且是建立在网络基础上的流&#xff0c;称之为socket流。该流中既有读取&#xff0c;也有写入。 **tcp的两个端点&#xff1a;**一个是客户端&#xff0c;一个是服务…

HCIA项目实践--RIP相关原理知识面试问题总结回答

9.4 RIP 9.4.1 补充概念 什么是邻居&#xff1f; 邻居指的是在网络拓扑结构中与某一节点&#xff08;如路由器&#xff09;直接相连的其他节点。它们之间可以直接进行通信和数据交互&#xff0c;能互相交换路由信息等&#xff0c;以实现网络中的数据转发和路径选择等功能。&am…

计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Django开发入门 – 4.创建Django app

Django开发入门 – 4.创建Django app Create A Django App Under An Existing Project By JacksonML 1. 什么是Django app? Django项目面向Web应用程序&#xff0c;它会由一个或多个子模块组成&#xff0c;这些子模块称为apps。 Django apps负责执行完整Web应用程序中涉及…

八、OSG学习笔记-

前一章节&#xff1a; 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码&#xff1a; OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…

微信小程序医院挂号系统

第3章 系统设计 3.1系统体系结构 系统的体系结构非常重要&#xff0c;往往决定了系统的质量和生命周期。针对不同的系统可以采用不同的系统体系结构。本系统为微信小程序医院挂号系统&#xff0c;属于开放式的平台&#xff0c;所以在管理端体系结构中采用B/s。B/s结构抛弃了固…

嵌入式八股文面试题(二)C语言算法

相关概念请查看文章&#xff1a;C语言概念。 1. 如何实现一个简单的内存池&#xff1f; 简单实现&#xff1a; #include <stdio.h> #include <stdlib.h>//内存块 typedef struct MemoryBlock {void *data; // 内存块起始地址struct MemoryBlock *next; // 下一个内…

【嵌入式Linux应用开发基础】open函数与close函数

目录 一、open函数 1.1. 函数原型 1.2 参数说明 1.3 返回值 1.4. 示例代码 二、close函数 2.1. 函数原型 2.2. 示例代码 三、关键注意事项 3.1. 资源管理与泄漏防范 3.2. 错误处理的严谨性 3.3. 标志&#xff08;flags&#xff09;与权限&#xff08;mode&#xff…

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32

MT6835 21位 磁编码器 SPI 平台无关通用驱动框架 STM32 1. 获取代码&#xff1a;2. 加入你的项目2.1 以 STM32 为例:2.2 以 ESP-IDF 为例: 3. 对接 API3.1 以 STM32 为例&#xff1a; 4. 更多函数说明5. 写入 EEPROM 示例 MT6835 Framework 纯C语言实现&#xff0c;跨平台&…

ArcGIS基础知识之ArcMap基础设置——ArcMap选项:常规选项卡设置及作用

作为一名 GIS 从业者,ArcMap 是我们日常工作中不可或缺的工具。对于初学者来说,掌握 ArcMap 的基础设置是迈向 GIS 分析与制图的第一步。今天,就让我们一起深入了解 ArcMap 选项中常规选项卡的各个设置,帮助大家更好地使用这款强大的软件。 在 ArcMap 中,常规选项卡是用户…

在fedora41中安装钉钉dingtalk_7.6.25.4122001_amd64

在Fedora-Workstation-Live-x86_64-41-1.4中安装钉钉dingtalk_7.6.25.4122001_amd64.deb 到官网下载钉钉Linux客户端com.alibabainc.dingtalk_7.6.25.4122001_amd64.deb https://page.dingtalk.com/wow/z/dingtalk/simple/ddhomedownload#/ 一、直接使用dpkg命令安装deb包报错…

设置mysql的主从复制模式

mysql设置主从复制模式似乎很容易&#xff0c;关键在于1&#xff09;主库启用二进制日志&#xff0c;2&#xff09;从库将主库设为主库。另外&#xff0c;主从复制&#xff0c;复制些什么&#xff1f;从我现在获得的还很少的经验来看&#xff0c;复制的内容有表&#xff0c;用户…

【算法学习】拓扑排序(Topological Sorting)

目录 定义 例子 拓扑排序的实现 核心思想 实现方法 1&#xff0c;Kahn算法&#xff08;基于贪心策略&#xff09; 步骤&#xff1a; 用二维数组存储图的例子 用哈希表存储图的例子 2&#xff0c;基于DFS的后序遍历法 总结 拓扑排序的应用场景 1&#xff0c;任务调度 …

AGI时代的认知重塑:人类文明的范式转移与思维革命

文章目录 引言:站在文明转型的临界点一、认知危机:当机器开始理解世界1.1 AGI的本质突破:从模式识别到世界建模1.2 人类认知的脆弱性暴露二、认知革命:重构思维的四个维度2.1 元认知升级:从直觉思维到二阶观察2.2 混合智能:人机认知回路的构建2.3 认知安全:防御机器思维…

零基础学CocosCreator·第九季-网络游戏同步策略与ESC架构

课程里的版本好像是1.9&#xff0c;目前使用版本为3.8.3 开始~ 目录 状态同步帧同步帧同步客户端帧同步服务端ECS框架概念ECS的解释ECS的特点EntityComponentSystemWorld ECS实现逻辑帧&渲染帧 ECS框架使用帧同步&ECS 状态同步 一般游戏的同步策略有两种&#xff1a;…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…

算法基础:贪心|双指针|二分|倍增

贪心 算法思想&#xff1a; 把整个问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直到所有步骤结束&#xff1b;每个步骤都不会影响后续步骤。 核心&#xff1a;采取局部最优&#xff0c;最终结果就全局最优。 双指针 反向扫描 同向扫描 二…

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令&#xff0c;如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符&#xff08;CMD&#xff0…