【Vue项目1】第一篇

Vue项目1学习第一篇

  • 01. 环境配置介绍和项目搭建
  • 02. Router路由配置引入
  • 03. ElementPlus引入和按需加载
  • 04. layout布局和菜单aside组件创建
  • 05. aside样式问题和treeMenu组件拆分
  • 06. treeMenu组件递归实现

01. 环境配置介绍和项目搭建

(1)安装node.js
在这里插入图片描述
在这里插入图片描述

安装完成之后,在vscode命令行输入npm install 20.16.0,然后重新开启命令行,输入nvm list来查看当前已下载的依赖。而后,通过nvm use 20.16.0切换到指定版本20.16.0,切换之后,输入node -v来查看当前的版本。

在这里插入图片描述

(2)创建Vue项目

我们使用Vite来创建。

在这里插入图片描述

Vite是一个脚手架工具,优点在于构建项目时速度非常
在这里插入图片描述
在这里插入图片描述
输入npm i下载依赖,这样项目就创建完成了。

02. Router路由配置引入

在当前默认页面中,url地址里面所显示的login,是其中的一个路由所对应的登陆页面。
在这里插入图片描述
在这里插入图片描述
点击登录之后,url中的地址login变为dashboard
在这里插入图片描述

这里就涉及到页面跳转

在Vue当中,页面跳转是使用Vue-Router来帮我们实现的。因此,我们接下来要去下载Vue-Router插件
在这里插入图片描述
在这里插入图片描述

在命令行输入上述命令之后,确认版本没问题之后,我们就需要去使用Vue-Router去创建路由和对应页面
在这里插入图片描述
日后路由配置就写入此文件中。

之后,执行如下操作:
(1)创建数组对象
在这里插入图片描述
(2)调用createRouer方法
在这里插入图片描述

实操如下:
(1)创建数组对象

const routes=[{//最开始的数据肯定是'/'path:'/'//这个'/'下会匹配当前访问'/'所匹配的页面//这个页面的属性就是component//component需要对应我们当前的一个Vue组件component:}
]

(接上文代码内容)
所以,我们创建一个Vue组件(Main.vue)来匹配:
在这里插入图片描述

并且引入index.js中。
(想了解原因可去看我写的【Vue3】第四篇最后一节)

在这里插入图片描述

以此类推,创建登陆界面:

在这里插入图片描述
然后,我们要创建Router实例
(ps:实例封装了数据和行为)

(2)调用createRouer方法
(createRouter 函数用于创建一个路由器实例)

①引入vue-router插件
②使用router里面的createRouter方法
③通过createRouter,把当前routers这个属性传递进去
在这里插入图片描述

注意:createRouer内要写入路由的匹配模式。

路由的匹配模式
在这里插入图片描述
模式有三种,我们这里使用Hash模式

(因为这种模式,在进行路由切换时不需要刷新,直接更换路由,更换界面内容。这种模式下不需要访问后台)

在这里插入图片描述

我们使用Hash模式,将其方法引入进来
在这里插入图片描述
调用其方法,设置为Hash模式
在这里插入图片描述
然后,当前方法会返回一个router实例,我们通过一个变量来接受一下
在这里插入图片描述
然后对外进行导出
在这里插入图片描述
导出之后,我们需要在当前的main.js文件(入口文件)中引入router

然后,把router挂载在Vue实例上。
在这里插入图片描述
这样,我们就完成了路由的挂载。

此时,我们还没有给路由配置对应的显示出口

比如说,我现在想访问’/',那这里(Layout)所访问的页面到底显示在什么地方,我们还没有定义。
在这里插入图片描述

我们这里需要使用Vue的一个组件
在这里插入图片描述

结果:
(注意:组件内容我没写入博客中)
①访问’/‘页面:
在这里插入图片描述
②访问’/login’页面:
在这里插入图片描述

03. ElementPlus引入和按需加载

在实际项目开发中,比较常见的一些UI显示,如button按钮、table数据的展示、分页等,一般都是用市面上比较成熟的UI框架当中的组件帮助我们实现。

我们推荐使用ElementPlus在这里插入图片描述

其优点是:
①开箱即用
②有很多的Js的交互效果是直接内置在组件内的
③所包含的组件非常多

在这里插入图片描述

接下来,我们来安装一下它。

(公司中,注意兼容性)
在这里插入图片描述

(1)下载
我们这里直接通过npm的方式下载它:
在这里插入图片描述

(2)在页面中引入

有两种引入方式:
在这里插入图片描述
我们一般是按需引入
在这里插入图片描述
在这里插入图片描述
然后重启项目就可以了。

ps:虽然在Vite里面是热更新,当修改页面中内容的时候,它会自动帮助我们打包,然后重新进行构建。但是配置文件它是监测不到的。
所以说,一旦修改了配置文件的内容,都需要把项目进行一个重启。

04. layout布局和菜单aside组件创建

在这里插入图片描述
在这里插入图片描述

接下来,我们来完成页面的布局

参考完整版项目,可以看到,页面分为三部分
在这里插入图片描述
然后在UI框架中寻找相符框架:
在这里插入图片描述
在这里插入图片描述

引入去除默认样式的css:
在这里插入图片描述
在这里插入图片描述

有了Layout布局之后,我们优先先来实现一下左侧部分。

因为左侧代码复杂,所以我们把它抽成一个组件
在这里插入图片描述

随后,复制UI框架的代码
在这里插入图片描述
在这里插入图片描述

可以发现,复制的代码内还定义了一些方法,那么在script里面同样也要把这些方法写出来

这里我们使用的是Vue3组合式API的写法。
可以直接在scipt内声明一个箭头函数

在这里插入图片描述

最后,在Main.vue内引入。
在这里插入图片描述

效果如下:
在这里插入图片描述

拓展:
代码内组件中所对应的属性,可以去官网查看
在这里插入图片描述

05. aside样式问题和treeMenu组件拆分

接下来,我们来完成左侧菜单部分的内容。

与完整版项目相比,左侧部分的样式还有些欠缺。
在这里插入图片描述

(1)高度不够
在这里插入图片描述

首先,设置class来修改样式:
在这里插入图片描述

在实际开发中,实际用的多的工具是less
在这里插入图片描述
在这里插入图片描述
(重启一下就可以开始使用了)

less的语法很简单,我们可以使用它的一个嵌套结构来编写样式以及控制层级。

回归正题,设置高度
在这里插入图片描述

我们都知道,100%是继承父级的高度,所以还需要给父级增加高度
在这里插入图片描述

但是刷新之后,却发现生效

检查,发现图中这部分要继承100%
在这里插入图片描述

(2)内容

标题:顶部有类似于标题这样的效果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

菜单:内容是动态的、可配置的,所以是由数据来渲染的。既然这样的话,那么菜单就会有不同的层级,如控制台有一级,权限管理有二级。
在这里插入图片描述
所以说,菜单的逻辑是会有嵌套的场景的,所以,把它抽成一个组件

06. treeMenu组件递归实现

本小节,我们继续来完成左侧菜单的内容。

左侧菜单的内容,依赖于当前的数据。

对于完整版而言,左侧菜单所展示的内容都是已经注册的一些路由信息

所以,现在我们首先要做的,就是在router里面给它把对应的这些路由添加上。

在这里插入图片描述

ps:
这个children,代表的是嵌套路由
这个meta,是我们额外所添加的一些信息,这些信息是必要的一些数据,后面会用到。

接下来,我们把所对应的子路由components页面 注册一下:
在这里插入图片描述
注意:结构部分不能乱写,后续在做权限时,我们需要使用动态路由的显示,这里的层级结构是需要和后面的数据匹配得上的。(※)
meta属性会带上路径整个的层级结构和路径相匹配的)

写到这里,我们的数据已经了,接下来就是如何去获取这个数据

ps:数据肯定是由外部传入Aside组件内部,通过props的形式进行传递,因为后面的话,我们考虑到是要改成使用动态数据。(※)

实现方法:

获取路由数据
调用router的一个方法获取实例
(这个vue-router告诉我们,在组合式API中,我们是可以通过一个useRouter来获取当前router的实例,然后去调用当前的这个数据,然后拿到router实例。)
在这里插入图片描述
我们可以来打印一下这个router实例,看看它到底长什么样子:
在这里插入图片描述

我们现在需要拿到我们当前配置的数据,那么,在这里面,我们会发现,里面有一个options这个数据,在其之下,有一个routes,在routes下面,第一项就是我们’/‘所需要的数据,我们只需要拿到’/'后面的数据,然后去menu组件内进行渲染即可。
在这里插入图片描述

理解了之后,我们开始代码:

①我们先来创建一个响应式数据(用ref/reactive来创建),然后传递到子组件里面。

(1)这里我们传递的是对象,用reactive来传递会更加合理
(2)直接把reactive解构出来,然后创建一个响应式数据

我们先拿到router.options.routes[0].children,这就是我们想要的menu数据(子数据)
在这里插入图片描述

然后通过父子组件通信的方式传入子组件里面。v-bind:传入数据,子组件defineProps通过数组的形式拿到数据。他会返回一个Props的对象,然后打印出来。

父组件:
在这里插入图片描述
子组件:
在这里插入图片描述
打印结果:
在这里插入图片描述
在这里插入图片描述

子组件拿到数据之后,就可以渲染左侧的菜单。

②菜单包含有子菜单无子菜单的情况。

①有子菜单,层级是我们不确定的(可能根据数据,有两级、三级等等)。所以说,这个复用的逻辑,我们优先考虑到使用递归组件来帮我们完成

我们可以看到,这个多级菜单是通过el-sub-menu包裹着每一层来实现的
在这里插入图片描述
最下面是没有子菜单的,只有一层
在这里插入图片描述
我们先把上面的那段代码注册掉。

我们这里既然是按照递归
那首先,我们要先判断没有子菜单的情况。

我们需要去遍历props的menudata拿到当前的数据item,以及它的索引index
在这里插入图片描述
拿到数据之后,接下来,我们需要去进行一个判断:

(1)对于有子菜单而言,让他们递归然后复用当前的逻辑
(2)对于没有子菜单而言,我们直接渲染。

如果是子菜单,则children
在这里插入图片描述

接下来,是写index(当前组件必须要我们携带的唯一项)
在这里插入图片描述

这里的index不能直接用遍历得到的index索引,因为这里使用的是递归的逻辑。子菜单里的第一项和父菜单里的第一项用index来判断会导致冲突。
所以要用父级的index和当前的index做一个拼接

结合数据,我们可以观察到,拿到的数据中meta里面有一个idid表示当前同级别里它是一个唯一的值。然后我们再拼接上父级的index值,就能确保这里的index是一个唯一项了。
在这里插入图片描述

写法如下:
在这里插入图片描述

解释

当前的index值由父组件传递进来,子组件通过defineProps获取
父组件:
在这里插入图片描述
子组件:
在这里插入图片描述
(需要父级传id是因为meta的id不唯一)

key亦是如此。

接下来我们来完成内容:渲染图标和名字

没有子菜单,直接渲染
在这里插入图片描述

有子菜单,递归实现
在这里插入图片描述
根据Element-UI源代码,填入上述内容(图标+名称)。

递归组件传入一样的名称,一样的参数。其中第二个参数改为“item.children"

(ps:递归实现index变化):
在这里插入图片描述

注意:递归组件可以去网上找视频深入了解。

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

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

相关文章

WPF使用Prism框架首页界面

1. 首先确保已经下载了NuGet包MaterialDesignThemes 2.我们通过包的项目URL可以跳转到Github上查看源码 3.找到首页所在的代码位置 4.将代码复制下来&#xff0c;删除掉自己不需要的东西&#xff0c;最终如下 <materialDesign:DialogHostDialogTheme"Inherit"Ide…

Golang | Leetcode Golang题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; func findLongestWord(s string, dictionary []string) (ans string) {m : len(s)f : make([][26]int, m1)for i : range f[m] {f[m][i] m}for i : m - 1; i > 0; i-- {f[i] f[i1]f[i][s[i]-a] i}outer:for _, t : range dictionary …

无人机的就业前景怎么样?

无人机的就业前景在当前及未来一段时间内都非常广阔。随着低空经济的蓬勃发展&#xff0c;无人机在农业、公安、测绘、交通、应急救援、影视拍摄等多个领域得到了广泛应用&#xff0c;对无人机操控员和相关专业人才的需求也随之急剧增加。 一、无人机操控员的就业前景 1. 高需…

如何将钉钉新收款单数据高效集成到MySQL

钉钉数据集成到MySQL的技术案例分享 在企业信息化管理中&#xff0c;数据的高效流动和处理至关重要。本文将分享一个具体的系统对接集成案例&#xff1a;如何将钉钉平台上的新收款单&#xff08;收款退款单&#xff09;数据集成到MySQL数据库中&#xff0c;方案名称为“dd-新收…

批量修改图片大小+删除空白页+手写签名

插入图片右键设置大小 设置对象格式 高度&#xff0c;宽度同一 最后一张图片拖到最后 alt键一下吸附好 ctrla全选图片 对齐 纵向分布 删除空白页 前面有文字 CTRL删除键 上一页是表格 CTRLd 勾选隐藏文字 手写签名 手机拍摄签名 发到电脑 文档里插入图…

软设师知识点-计算机网络

计算机网络 在一台安装好TCP/IP协议的计算机上&#xff0c;当网络连接不可用时&#xff0c;为了测试编写好的网络程序&#xff0c;通常使用的目的主机IP地址127.0.0.1&#xff08;本地回送地址&#xff09; *网络设备 物理层的互传设备&#xff1a;中继器(用于扩展局域网网段…

40.第二阶段x86游戏实战2-初识lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

Docker可视化管理面板DPanel的安装

本文软件由网友 rui 推荐&#xff1b; 什么是 DPanel &#xff1f; DPanel 是一款 Docker 可视化管理面板&#xff0c;旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能&#xff0c;使用户能够更轻松地管理和部署 Docker 环境。 软件特点&#xff1a; 可视化管理&…

Nature文章《deep learning》文章翻译

这篇文章是对Nature上《deep learning》文章的翻译。原作者 Yann LeCun, Yoshua Bengio& Geoffrey Hinton。 这篇文章的中心思想是深入探讨深度学习在机器学习中的革命性贡献&#xff0c;重点介绍其在特征学习、监督学习、无监督学习等方面的突破&#xff0c;并阐述其在图…

低代码用户中心:简化开发,提升效率的新时代

随着数字化转型的加速&#xff0c;企业对于快速交付高质量应用的需求日益增长。在这个背景下&#xff0c;低代码开发平台应运而生&#xff0c;成为越来越多企业和开发者的首选工具。今天&#xff0c;我们将聚焦于低代码用户中心&#xff0c;探讨其如何帮助开发者简化流程、提升…

leetcode71:简化路径

给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下&#xff1a; 一个点 . 表示当前目录本身。此外&#xff0c;两个点 ..…

2、liunx网络基础

一、TCP/IP协议概述 Linux服务器默认网卡配置文件在/etc/sysconfig/network-scripts/下&#xff0c;命名的名称一般为:ifcfg-eth0 ifcfg-eth1 &#xff0c;eth0表示第一块网卡&#xff0c;eth1表示第二块网卡&#xff0c;依次类推。一般DELL R720标配有4块千兆网卡。 TCP/IP&a…

[neo4j报错]py2neo.errors.ClientError: [Request.Invalid] Not Found解决方案

报错源代码 g Graph(http://localhost:7687, auth("neo4j", "password"))或许这是从网上复制下来的代码&#xff0c;看上去没什么问题&#xff0c;但实际上 要结合具体的浏览器上的地址来看&#xff0c;具体如下&#xff1a; 看到了吗&#xff0c;这里才…

WPF+MVVM案例实战(二十一)- 制作一个侧边弹窗栏(AB类)

文章目录 1、案例效果1、侧边栏分类2、AB类侧边弹窗实现1.文件创建2、样式代码与功能代码实现3、功能代码实现 3 运行效果4、源代码获取 1、案例效果 1、侧边栏分类 A类 &#xff1a;左侧弹出侧边栏B类 &#xff1a;右侧弹出侧边栏C类 &#xff1a;顶部弹出侧边栏D类 &#xf…

基于Multisim数控直流稳压电源电路(含仿真和报告)

【全套资料.zip】数控直流稳压电源电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.输出直流电压调节范围5-12V。 2.输出电流0-500mA。 3.输出直流电压能步进调节&#xff0c;步…

原来大佬的测试用例都是这样写的...

1、测试点与测试用例 测试点不等于测试用例&#xff0c;这是我们首先需要认识到的。 问题1&#xff1a;这些测试点在内容上有重复&#xff0c;存在冗余。 问题2&#xff1a;一些测试点的测试输入不明确&#xff0c;不知道测试时要测试哪些。 问题3&#xff1a;总是在搭相似…

ubuntu20.04 加固方案-设置SSH是否使用业界认可的加密算法

一、编辑/etc/ssh/sshd_config配置文件 打开终端。 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/ssh/sshd_config文件。 vi /etc/ssh/sshd_config 二、添加配置参数 在打开的配置文件中&#xff0c;如图位置添加如下参数&#xff1a; 查看支持的算法&#xff1a;h…

机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

动态规划应该如何学习?

动态规划如何学习 参考灵神的视频和题解做的笔记&#xff08;灵神YYDS&#xff0c;以后也都会用这套逻辑去思考&#xff09; 枚举选哪个&#xff1a; 动态规划入门&#xff1a;从记忆化搜索到递推_哔哩哔哩_bilibili 746. 使用最小花费爬楼梯 - 力扣&#xff08;LeetCode&a…