欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Vue的学习(5)

Vue的学习(5)

2025/2/13 15:04:40 来源:https://blog.csdn.net/2401_88560642/article/details/145537662  浏览:    关键词: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 规则表] 中查找其      具体含义。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com