# 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只能使用在