【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变化):
在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始的LeetCode-算法】3127. 构造相同颜色的正方形

给你一个二维 3 x 3 的矩阵 grid ,每个格子都是一个字符,要么是 B ,要么是 W 。字符 W 表示白色,字符 B 表示黑色。 你的任务是改变 至多一个 格子的颜色,使得矩阵中存在一个 2 x 2 颜色完全相同的正方形。 如果可以…

Javaweb梳理8——数据库设计

Javaweb梳理8——数据库设计 8 数据库设计8.1 数据库设计简介8.2 表关系(一对多)8.3 表关系(多对多)8.4 表关系(一对一) 8 数据库设计 8.1 数据库设计简介 软件的研发步骤 数据库设计概念 数据库设计就是根据业务系统的具体需…

Edge 浏览器插件开发:图片切割插件

Edge 浏览器插件开发:图片切割插件 在图片处理领域,按比例切割图片是一个常见需求。本文将带你开发一个 Edge 浏览器插件,用于将用户上传的图片分割成 4 个部分并自动下载到本地。同时,本文介绍如何使用 cursor 辅助工具来更高效…

QT QPainter 绘图

QT QPainter 绘图 一、基本绘图类: Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作,其提供的 API 在…

【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)

目录 1.位图的概念 2.位图的使用方法 定义与创建 设置和清除 位访问和检查 转换为其他格式 3.位图的使用场景 1.快速的查找某个数据是否在一个集合中 2.排序去重 3.求两个集合的交集和并集 4.位图的底层实现 私有成员定义与初始化 set和reset的实现 前面的博客我们…

在线教育系统源码开发详解:网校培训平台搭建的核心技术

本篇文章,笔者将详细介绍在线教育系统源码的开发过程,重点聚焦网校培训平台搭建的核心技术,以期为有意从事在线教育行业的开发者提供实用的参考。 一、在线教育系统的构成 前端负责用户的交互体验,后端处理业务逻辑,…

qt QPalette详解

1、概述 QPalette是Qt框架中用于管理颜色组和角色的一种机制。它允许开发者为应用程序中的不同组件(如窗口、按钮、文本框等)定义一套统一的颜色方案。QPalette通过定义颜色角色(如背景色、前景色、选择色等)和颜色组&#xff08…

Java基本语法和基础数据类型——针对实习面试

目录 Java基本语法和基础数据类型标识符和关键字有什么区别?Java关键字有哪些?Java基本数据类型有哪些?什么是自动装箱和拆箱?自动装箱(Autoboxing)自动拆箱(Unboxing) 自动装箱和拆…

逻辑磁盘管理 附实验:逻辑卷的组成与划分

分区类型: 1、系统引导分区 就是存放系统的引导文件和Linux的内核文件 2、swap分区 交换分区,系统的物理内存不足时,从一些长时间未运行的程序当中释放一部分内存释放出来的保存到swap分区,这些未运行的程序一旦运行还要从swap空…

fetch: 取消请求、读取流、获取下载进度...

引言 Fetch API 提供了一个获取资源的接口(包括跨网络通信)。对于任何使用过 XMLHttpRequest 的开发者来说, 对于 Fetch 应该都能轻松上手, 而且新的 API 提供了更强大和灵活的功能集… 本文主要就是记录下, 在使用 Fetch 期间可能会碰到的几个小案例… 一、取消请求 在前端…

【 纷享销客-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

mobaxterm 中文输入问号解决办法

无论是终端,还是session的name,输入中文都是问号,那么使用以下方法可解决问题 语言设置中找到英文键盘删除即可

Hive的数据存储格式

目录 一、前言 二、存储格式 2.1、文本格式(TextFile) 2.1.1、定义与特点 2.1.2、存储与压缩 2. 1.3、使用场景 2.2、行列式文件(ORCFile) 2.2.1、ORC的结构 2.2.2、ORC的数据类型 2.2.3、ORC的压缩格式 2.2.3、ORC存储…

Spring Boot的核心优势及其应用详解

目录 前言1. Spring Boot的核心优势1.1 启动依赖的集成1.2 自动化配置 2. 内嵌服务器支持2.1 内嵌Tomcat服务器2.2 独立运行与便捷部署 3. 外部配置管理3.1 多环境支持3.2 配置优先级与外部化配置 4. Spring Boot的应用场景4.1 微服务架构4.2 云原生应用 结语 前言 在现代的Ja…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

ubuntu22.04 docker-compose搭建apisix高可用

首先你得先确保每台主机安装了docker和docker-compose 3台主机 没有安装docker和docker-compose的可以看我前两篇博客 可以先克隆仓库 git clone https://github.com/apache/apisix-docker.git 进入example目录 拷贝dashboard配置文件 将all-in-one中apisix-dashboard文件夹拷…

北大计算机考研难度如何?毕业后就业情况怎么样?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 一、总体情况概述 北京大学计算机 2024 届考研整体呈现 “稳中有升” 的态势。在复试分数线方面,无论是学硕(本部)还是专硕(深圳),较 2023 届均有…

黑马JavaWeb-day04

文章目录 mavenmaven 简介maven 安装IDEA集成maven创建maven项目Maven 坐标依赖管理单元测试 Web入门Springboot 入门HTTP协议三层架构分层解耦 I O C & D I IOC\&DI IOC&DI入门 I O C IOC IOC和 D I DI DI详解 maven maven 简介 maven: M a v e n Maven Maven是…

什么是FUSE用户态文件系统

零. 文件系统 1. 为什么要有文件系统 文件系统是操作系统中管理文件和目录的一种机制。它提供了组织、存储、检索和更新文件的方法,主要如下: 数据组织:文件系统将数据组织成文件和目录,使用户能够更方便地管理和查找文件。每个…

品牌怎么找到用户发的优质内容,进行加热、复制?

在,相对传统媒体来说,社交媒体营销具有更高的成本效益。品牌可以通过相对较低的成本达到大量潜在客户,尤其是通过口碑营销和内容分享,可以实现倍增的传播效果。在社媒营销的过程中,去找到与品牌有关的优质、正向内容&a…