# vue3_learning
**Repository Path**: www-cai-com/vue3_learning
## Basic Information
- **Project Name**: vue3_learning
- **Description**: 学习vue3
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-16
- **Last Updated**: 2025-03-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
```text
《Vue3》第23节:Vue3项目中实现菜单数据的动态加载
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485921&idx=1&sn=d2ea63470ad4be868d200253fa6cdcc2&chksm=f982448dcef5cd9b18ba134fbfb9442a9c9933a5a739ca6bf1a8a979d9257778ee73e084e729&cur_album_id=3753444636422111232&scene=189#wechat_redirect
不同的用户拥有不同的权限角色,登录后展示不同的菜单页面
1.2、新建mock.js文件
1.3、新建dynamicRoutes.js文件
1.4、修改login.js文件
1.5、修改permission.js文件
```
```text
《Vue3》第22节:Vue3项目控制访问页面的权限
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485908&idx=1&sn=f38f527a17c32b3437d9ea9021c8c62e&chksm=f98244b8cef5cdae38105c9b48dfd9d99df9e4673bc6bb5779002d40bb8f7f308ead1b4d76cf&scene=178&cur_album_id=3753444636422111232#rd
当不存在token时,会默认跳转到登录页面,登录成功后因为token存在,
所以即使用户直接访问login页面,此时也会直接跳转到后台首页
关键在于对permission.js文件里面的代码
router.beforeEach((to, from, next) => {})
router.afterEach((to, from) => {})
```
```text
《Vue3》第21节:Vue3项目引入NProgress加载进度条插件
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485902&idx=1&sn=1d426b8999030e6c2456573cf9aa02a3&chksm=f98244a2cef5cdb47f78a9a134f964642dd7d04da16351a6c26f2f38483cd9f7bbb4c58d4855&cur_album_id=3753444636422111232&scene=189#wechat_redirect
# 安装 nprogress 依赖
npm install nprogress --save
```
```text
《Vue3》第20节:Vue3项目全局设置滚动条样式
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485893&idx=1&sn=68df489c76c53ff2bd7d36f1de1c7872&chksm=f98244a9cef5cdbf7116af614f34099afc230b00acd005e717393027e70db56772bd3a250ed7&cur_album_id=3753444636422111232&scene=189#wechat_redirect
注意:一般在实际开发中,全局的CSS样式代码,都会抽取到styles.css或者styles.scss文件里面,
该文件可以直接放在src目录下,也可以放在src/assets/styles目录下,
我这里是放在了src/assets/styles目录里面。
```
```text
《Vue3》第19节:Vue3项目实现点击图标折叠和展开侧边栏的功能
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485887&idx=1&sn=1f0dbb02d68bbea729eac6c9696578f2&chksm=f98244d3cef5cdc5ced133c5d0e5cae078d8698afb84e58a4dd39d03e2cd01fd661d260f03bd&cur_album_id=3753444636422111232&scene=189#wechat_redirect
要实现侧边菜单栏的折叠和展开功能,需要动态地调整侧边栏的宽度:
当折叠的时候将侧标栏宽度减少到最小的宽度,这里设置成64px;
当展开的时候,将侧边栏增加到初始的宽度,比如是200px;
3个问题如下
1.第一个问题:要如何动态控制侧边栏宽度大小呢?
2.第二个问题:要如何控制菜单组件的宽度?
Element Plus中的菜单组件提供了一个collapse属性,
通过这个collapse属性可以很方便的实现菜单栏的折叠和展开的功能。
另外,还需要使用:collapse-transition="false"禁用默认的过渡动画,
不然,折叠和展开的时候,会有点突兀,最后,我们自己添加过渡动画。
3.第三个问题:页面刷新后,如何记住上一次的折叠或展开状态?
要记住上一次侧边栏的状态,可以将侧边栏的状态保存到localStorage里面,
当页面刷新的时候,首先从localStorage里面取值,如果上一次的值不存在,则使用默认状态值。
```
```text
《Vue3》第18节:Vue3项目实现点击刷新图标重新加载组件界面
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485881&idx=1&sn=26bead0ce1c004b4bc844715a898288b&chksm=f98244d5cef5cdc3aaeaaacde193ae614374823f5671009cf97c3b9389d9294e74b7362d6b8f&cur_album_id=3753444636422111232&scene=189#wechat_redirect
标签
name属性 过渡效果的class类名称,默认名称是:
v-enter-from:进入过渡的开始状态
v-enter-to:进入过渡的结束状态
v-enter-active:进入过渡的激活状态
v-leave-from:离开过渡的开始状态
v-leave-to:离开过渡的结束状态
v-leave-active:离开过渡的激活状态
也可以自定义class类名称,只需要name指定自定义的class类名称即可。
mode属性 指定过渡效果的模式
有三个取值:
in-out模式:新的组件先过渡进入,当前组件再过渡离开。
out-in模式:当前组件先过渡离开,新的组件再过渡进入。
default模式:进入和离开同时。
```
```text
《Vue3》第17节:Vue3项目实现点击图标进入全屏显示的功能
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485875&idx=1&sn=eac265694ba1b3f39101288fe8487fbf&chksm=f98244dfcef5cdc93fd4c215ba4644581e54a7bbeb18226734f16f709cd69ba2abafda399c5b&cur_album_id=3753444636422111232&scene=189#wechat_redirect
vue3中,要想实现点击某个图标后,让界面全屏展示,那么可以使用screenfull全屏插件,
该插件提供全屏,退出全屏,监听全屏状态等功能。
# 安装 screenfull 全屏插件
npm install screenfull
```
```text
《Vue3》第16节:Vue3项目实现管理后台头部信息栏的功能
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485868&idx=1&sn=915b40c7b78bc0a2b66457dafe960f6e&chksm=f98244c0cef5cdd6165934f3e66602e20619df7eaf72515889b76e791dcc0856d858cdb43600&cur_album_id=3753444636422111232&scene=189#wechat_redirect
实际开发中,管理后台首页的头部信息栏,一般会显示头像,个人中心,退出登录,全屏显示等功能,这些需求可以根据实际的需要来添加
```
```text
《Vue3》第15节:Vue3项目实现管理后台左侧菜单栏的功能
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485858&idx=1&sn=e972e27571c13c03546b8f57f80d773f&chksm=f98244cecef5cdd8d2c25a068c0e92a8d1394bb68b1e2a0d27a03c2061b86cde3b75304bd936&cur_album_id=3753444636422111232&scene=189#wechat_redirect
左侧菜单栏可以实现多层级的,可以无限嵌套层级,
```
```text
《Vue3》第14节:Vue3项目实现管理后台首页面布局
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485852&idx=1&sn=fe6a16769f1b76a0e7b1a41b6a719f28&chksm=f98244f0cef5cde6d47a856e250dec11ab4b95c3db61b9af1eb72b85da1edf07c475abcca0a8&scene=178&cur_album_id=3753444636422111232#rd
在后台管理系统中,首页的布局基本上都是3部分组成:头部信息栏,左侧菜单栏,内容区域。
布局代码如下
```
```text
《Vue3》第13节:Vue3项目实现用户注册登录界面
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485846&idx=1&sn=d1f6cda69fec74e4a2cab31d995f391f&chksm=f98244facef5cdec4d506c1602a5f9a10a68f0f4dadb2d5fa9d276b745023ab3a0d0529f9d39&scene=178&cur_album_id=3753444636422111232#rd
PS:样式并不重要,重要的是如何实现登录、注册的交互效果,以及界面的跳转功能。
1 通过@keyup.enter监听回车事件,
用户名和密码的输入框中,分别添加@keyup.enter事件,这样就可以实现回车触发登录的功能。
2 实现登录思路
在实际开发过程中,实现登录功能的时候,一般会在store中定义相应的方法,
然后通过嗲用store.dispatch()方法来触发登录,
在处理登录的store方法中,需要调用后端服务的接口
3 校验登录
校验是否登录成功,如果登录成功,则需要将后端返回的token保存到localStoreage中,
另外登录成功之后可以跳转到指定的页面(一般是首页)
```
```text
《Vue3》第12节:Vue3项目采用SVG方式引入图标文件
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485838&idx=1&sn=251a1634be6c57ad2b758d14248df939&chksm=f98244e2cef5cdf49a2b3f2e63306962ea21091f7663fde21ae139f5eb1894db1f9c5a707112&cur_album_id=3753444636422111232&scene=189#wechat_redirect
介绍
iconfont是阿里巴巴提供的一个图标素材库,这个图标库中有非常多的icon图标,
可以直接搜索自己想要的图标,还支持调整颜色、大小、图标样式等等功能。
官网地址:
https://www.iconfont.cn/search/index
1 安装 vite-plugin-svg-icons 依赖
npm i vite-plugin-svg-icons fast-glob -D
要想在Vue3 + Vite的项目中正确识别SVG图标,还需要安装一个vite-plugin-svg-icons插件和fast-glob插件,
vite-plugin-svg-icons插件的作用是:
批量处理所有的SVG文件,将每一个SVG文件转换成唯一的SVG Symbol,
之后在需要使用SVG图标的地方,就可以直接通过SVG Symbol唯一标识访问到了。
fast-glob插件的作用:
用于文件系统路径的匹配和遍历,说到直接一点,就是使用这个fast-glob插件来处理文件路径。
在这个小节中,是通过fast-glob插件来快速获取到SVG文件的路径相关信息。
2 在vite.config.js中配置插件
在vite.config.js配置文件中,
添加vite-plugin-svg-icons插件的相关配置信息,核心配置代码,如下所示:
import path from'path';
// 引入SVG插件
import {createSvgIconsPlugin} from'vite-plugin-svg-icons';
exportdefault defineConfig({
plugins: [
vue(),
createSvgIconsPlugin({
// vite-plugin-svg-icons 插件会读取指定文件夹下的所有svg图标
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],
// 指定生成SVG的 symbolId 格式
symbolId: 'icon-[name]',
})
]
});
3 在main.js中导入图标
// 导入SVG图标注册脚本
import 'virtual:svg-icons-register';
```
```text
《Vue3》第11节:Vue3项目引入Font Awesome图标库
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485752&idx=1&sn=df398490585330f50278bf7a4c57861f&chksm=f9824454cef5cd4266df73a26a0ab3cc8fe2542a7b5a1d19236babf7506d45333a4db3032a90&cur_album_id=3753444636422111232&scene=189#wechat_redirect
Font Awesome是一个第三方提供的图标库,v5版本提供了1820个图标,
可以覆盖大部分的图标使用场景了,可以去官网查看有哪些图标。
https://fontawesome.com.cn/v5
1# 安装 font-awesome 图标库的依赖
npm i --save @fortawesome/fontawesome-svg-core
npm i --save @fortawesome/free-solid-svg-icons
npm i --save @fortawesome/vue-fontawesome@latest-3
2 注册图标组件
// 引入 font-awesome 图标库
import {library} from'@fortawesome/fontawesome-svg-core';
import {FontAwesomeIcon} from'@fortawesome/vue-fontawesome';
// 按需引入要使用的图标,例如:我要使用 faHome 这个图标,那就需要引入这个图标
import {faHome} from'@fortawesome/free-solid-svg-icons';
// 添加图标到库中
library.add(faHome);
// 创建Vue3实例对象
const app = createApp(App);
// 注册图标组件
app.component('font-awesome-icon', FontAwesomeIcon);
// 挂载Vue3实例到 #app 容器
app.mount('#app');
3 组件
icon属性:必填,指定具体的图标样式和图标名称。可以使用字符串、数组两种方式。
size属性:不必填,设置图标大小,如 "2xs"、"xs"、"sm"、"lg"、"xl"、"2xl"等。
spin属性:不必填,设置图标是否添加顺时针自动旋转效果,默认不旋转。
如果需要设置其他性质,比如设置颜色,只能通过css样式设置
比如直接使用 style="color:red;" 修改图标颜色,示例如下:
```
```text
《Vue3》第10节:Vue3项目引入Element Plus图标库组件
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485751&idx=1&sn=2811095b44cbccbf72d3d5ea929df21c&chksm=f982445bcef5cd4d8841cb7c7bda0b6712725bbfe285a9739d78e3aa1b4fac7961e415da0a44&scene=178&cur_album_id=3753444636422111232#rd
1 安装 @element-plus/icons-vue 依赖
npm install @element-plus/icons-vue
2 全局注册图标
// 引入图标
import * as ElementPlusIconsVue from '@element-plus/icons-vue';
// 注册图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component);
}
3 使用
图标列表
https://element-plus.org/zh-CN/component/icon.html#icon-collection
方式一:直接通过SVG方式显示图标。
方式二:使用标签显示图标。
```
```text
《Vue3》第09节:Vue3项目引入vue-cropper实现图片裁剪
1 # 安装 vue-cropper 依赖
npm install vue-cropper@latest
```
```text
《Vue3》第08节:Vue3基于ElementPlus自定义表单组件
https://mp.weixin.qq.com/s?__biz=MzUxODgyMjkxNQ==&mid=2247485655&idx=1&sn=08cc8dc0ee23c40c58bd77d40749f84a&chksm=f98245bbcef5ccad55c236202460bf6cca20a231aa4e6f7b9318dd524d5885ef393970e793ce&cur_album_id=3753444636422111232&scene=189#wechat_redirect
1 $attrs标签属性
1 $attrs是Vue中提供的一个属性,可以获取到组件标签上的属性,并且是非props属性。
2 如果子组件中定义了一个name的props属性,那么$attrs是无法获取到name属性,因为$attrs只能获取非props属性。
3 $attrs只能使用在模板区域中,如果你想在