Vue3学习笔记第一天
MVVM
Vue是一种用于构建用户界面的JavaScript框架。MVVM 是Vue采用的一种软件架构模式,用于构建交互式的用户界面。它的全称是 Model-View-ViewModel,这三个部分分别代表了应用程序的不同层次和角色:
Model(模型):
模型代表应用程序的数据和业务逻辑。在MVVM模式中,模型通常不直接与视图交互,而是由ViewModel层进行中介。
View(视图):
视图是用户直接与之交互的界面。它通常是用户界面的可视化部分,如网页中的HTML页面或移动应用中的屏幕。
ViewModel(视图模型):
视图模型是视图的抽象层,它负责处理视图的展示逻辑和用户交互。视图模型通常包含了视图所需的数据和命令,并且负责向视图暴露方法和属性。它的存在可以使视图与具体的业务逻辑解耦,并且可以方便地进行单元测试。
MVVM模式的关键特点是数据绑定和命令绑定。数据绑定使得视图模型中的数据变化能够自动反映到视图上,而命令绑定则使得视图模型中的方法可以直接绑定到视图的交互事件上,从而实现用户操作与后台逻辑的交互。
NPM
全称是Node Package Manager
中文名为Node.js包管理器,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。使用NPM可以方便地从一个全球的代码库中获取并安装Node.js模块,这些模块可以用于构建应用程序、工具和包等。开发者可以通过NPM来搜索、安装、更新和卸载各种Node.js模块。此外,NPM还提供了发布和共享代码、管理依赖、版本控制等功能,可以帮助开发者更方便地开发和分享代码。
在命令提示符中写入以下代码:
npm -v //查看是否安装成功
//设置国内镜像
npm config set registry https://mirrors.huaweicloud.com/repository/npm/npm create vite@latest //在你要创建项目的文件夹路径下
VUE3项目的创建
下载VScode并安装vue插件
选择使用vite直接创建
vite是下一代前端开发与构建工具,优点有:
快速的开发体验:Vite采用浏览器原生的模块化系统,避免了传统构建工具的静态打包和编译,从而提高了开发效率和构建速度。它还支持Hot Module Replacement(HMR)和快速刷新等功能,可以实时更新代码和预览修改效果,让开发者专注于开发过程中的实际需求。
丰富的功能:Vite对TypeScript、JSX、CSS等支持开箱即用,无需额外配置。它还提供了优化的构建选项,可以选择“多页应用”或“库”模式的预配置Rollup构建。
灵活的API和完整TypeScript类型:Vite提供完全类型化的API和灵活的API,使得开发者可以更加方便地使用它进行开发。
插件化的架构:Vite允许开发者通过插件来扩展其功能,这使得Vite可以适应各种不同的项目需求。
更好的兼容性:Vite使用ES Module作为模块系统,比CommonJS更现代化、更高效。同时,它还提供了兼容CommonJS的方案,使得一些依赖CommonJS的库也可以在Vite中使用。
轻量级的解决方案:Vite是一个非常轻量级的解决方案,其核心代码非常小,这使得它可以在各种设备上快速运行,包括在低性能的设备上。
社区支持:Vite得到了广泛的社区支持和维护,这意味着开发者可以从社区中获得帮助和支持,并且可以快速地解决遇到的问题。
打开VScode,根据你创建的项目的路径打开项目文件夹
然后打开vscode的终端,写入以下代码:
npm install
npm run dev //运行项目
默认访问路径为 http://localhost:5173/,浏览器访问
访问后如图:
项目结构
创建项目后,项目内会自动生成一些默认文件:
index.html:
这是整个应用的入口 HTML 文件。它通常位于 /public 文件夹中。在 Vue 3 项目中,这个文件充当了 Vue 应用的容器,Vue CLI 会将编译后的 JavaScript 文件插入到这个 HTML 文件中的特定位置,最终生成可供浏览器访问的网页。
vite.config.js:
这是 Vite 构建工具的配置文件。Vite 是一个现代化的前端构建工具,用于快速构建开发服务器和生产环境的静态资源。在这个配置文件中,你可以定义构建时需要的插件、自定义路由和代理规则等。
main.js:
这是 Vue 应用的主入口文件。在 Vue 3 中,它通常用于创建根 Vue 实例,加载全局组件、路由和状态管理等,并且将根组件挂载到 HTML 中的某个 DOM 元素上。
style.css:
这是全局样式文件,用于定义整个应用的全局样式。你可以在这里定义一些通用的 CSS 规则,例如重置默认样式、全局字体设置、颜色主题等。
App.vue:
这是 Vue 应用的根组件。在 index.html 中,Vue 会将根组件渲染到指定的 DOM 元素中。App.vue 通常包含应用的主要布局和导航结构,以及其他全局性的内容和逻辑。
components 文件夹:
这个文件夹通常用于存放应用中的各种 Vue 组件。Vue 组件是构建 Vue 应用的基本单元,每个组件都可以有自己的模板、样式和逻辑。在这里,你可以根据功能或布局将组件进行组织,便于复用和维护。
assets 文件夹:
这个文件夹通常用于存放应用中的静态资源,例如图片、字体文件、SVG 等。这些资源可以在各个组件中引用和使用,使得应用的视觉和功能更加丰富和动态。
配置路由
在components文件夹中创建所需要的vue文件
在src中创建router文件夹,在此文件夹中创建index.js文件,router/index.js就是路由的配置文件
import { createRouter,createWebHashHistory } from "vue-router";const router=createRouter({history:createWebHashHistory(),routes:[{path:"/easya",component:()=>import("../views/easya.vue")}]
});
export default router;
想要使用路由必须在该项目中安装vue-router组件
在main.js文件中引用路由配置
import router from './router'
在App.vue文件中添加路由占位符
<script setup>
</script><template><router-view></router-view> //占位符
</template>
最后访问网站
绑定数据和函数
vue3推荐使用setup函数绑定数据
使用ref函数声明响应式的值类型数据的初始值
在setup函数中,对ref()函数声明的数据进行取值和赋值时,需要使用.value
在template组件中使用ref()声明的数据,直接使用即可,不需要使用.value
<script setup>import {ref} from 'vue';const num=ref(12);const show=ref(true);const arr=ref([12,34,56,78]);const staffData=ref({});const changeNum=function(){console.log("changNum method")num.value=num.value+1;}const changeShow=()=>{show.value=!show.value;}
</script>
<template><h1 v-text="num" v-if="show"></h1><button @click="changeNum">按钮</button><button @click="changeShow">是否显示</button><div v-for="(item,index) in arr" class="box">{{ index }}:{{ item }}</div>
</template>
<style>.box{height: 50px;width: 50px;border: 1px solid black;margin: 10px;}
</style>
axios异步请求
在项目中安装axios
npm install axios
在src中新建文件夹util或者utils,新建文件http.js
import axios from 'axios';export default function (options) {//配置每次发送请求都从sessionStorage中获取名字叫token的数据,//添加到请求头部的Authorization属性中//Object.assign用于合并对象的数据options.headers = Object.assign({ Authorization: sessionStorage.getItem('token') },options.headers || {});//axios() 返回一个promise对象,用于异步请求//options是一个对象,其中包含了许多用于配置请求的参数,//例如请求的url、请求方法(GET、POST等)、请求头等return axios(options).then(({ status, data, statusText }) => {//该函数在请求成功并返回数据时被调用//status:HTTP状态码,例如200表示请求成功。//data:服务器返回的数据。// statusText:HTTP状态文本,例如"OK"表示请求成功。console.log(data);if (status == 200) {return data;} else {throw new Error(statusText);}}).catch(e=>{return Promise.reject(e);//return Promise.reject(e.message);});
}
在src中重建api文件夹,在文件夹中创建index.js
import http from '../util/http.js';const API={get:(url)=>{return http({url:url,method:'get'})}
};
export default API;
新建一个vue页面(做好路由),发送请求
<script setup>import {ref,onMounted} from 'vue';import easyapi from '../api'var num=ref(12);const show=ref(true);const arr=ref([12,34,56,78]);const staffData=ref({});const changeNum=function(){console.log("changeNum method");num.value=num.value+1;}const changeshow=()=>{show.value=!show.value;}onMounted(async function(){let result=await easyapi.get("/api/staff");staffData.value=result.data;console.log(staffData.value);});const getData=async()=>{staffData.value=await easyapi.get("/api/staff");console.log(staffData.value);}</script>
<template><el-button type="warning">Warning</el-button><table><tr><td>ID</td><td>CODE</td><td>NAME</td><td>SALARY</td></tr><tr v-for="(item,index) in staffData"><td>{{ item.id }}</td><td>{{ item.code }}</td><td>{{ item.name }}</td><td>{{ item.salary }}</td></tr></table><h1 v-text="num" v-if="show"></h1><button @click="changeNum">按钮</button><button @click="changeshow">是否显示</button><button @click="getData">获取数据</button><div v-for="(item,index) in arr"class="box">{{ index }}:{{ item }}</div>
</template>
<style>.box{height: 50px;width: 50px;border: 1px solid black;margin: 10px;}
</style>
配置代理,在wite.config.js文件中添加以下代码
server:{// 配置vite冷启动项目自动使用浏览器访问首页open:true,proxy: { '/api': {target: 'http://localhost:8080',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, ''),},}}
最后访问页面
vue3中的生命周期函数
onBeforeMount: 在组件挂载(即插入DOM)之前被调用。这个生命周期阶段通常用于在组件被渲染之前获取数据或执行其他准备工作。
onMounted: 在组件挂载之后被调用。这个生命周期阶段通常用于在组件已经插入DOM之后执行某些操作,例如启动动画或定时任务。
onBeforeUpdate: 在组件更新之前被调用。这个生命周期阶段通常用于在组件更新之前获取数据或执行其他准备工作,例如重新渲染之前的清理工作。
onUpdated: 在组件更新之后被调用。这个生命周期阶段通常用于在组件已经更新之后执行某些操作,例如根据新的数据重新渲染UI。
onBeforeUnmount: 在组件卸载(即从DOM中移除)之前被调用。这个生命周期阶段通常用于在组件卸载之前执行清理操作,例如取消事件监听器或定时任务。
onUnmounted: 在组件卸载之后被调用。这个生命周期阶段通常用于在组件已经从DOM中移除之后执行某些操作,例如清理资源或记录日志。
@CrossOrigin注解
@CrossOrigin 是一个用于 Spring Framework 的注解,用于处理跨域资源共享(CORS)的问题。CORS 是一种浏览器安全策略,限制了一个网页上的脚本如何能够跨域请求不同域的资源。
作用和用法:
启用跨域请求:
当一个后端服务(如 Spring Boot 应用)提供 API,而这些 API 需要被不同域的前端应用调用时,由于浏览器的安全策略限制,这些跨域请求会被阻止。使用 @CrossOrigin 注解可以告诉浏览器,特定的 API 或控制器方法允许特定来源的请求访问。
配置允许访问的来源:
@CrossOrigin 注解可以设置多个参数,其中最常用的是 origins,用于指定允许访问的来源域名。例如:
@CrossOrigin(origins = "http://example.com")
这表示只有来自 http://example.com 域名的请求能够访问被该注解标记的 API。
其他配置参数:
@CrossOrigin 还支持其他配置参数,如 methods(允许的 HTTP 方法)、allowedHeaders(允许的请求头)、exposedHeaders(暴露的响应头)、allowCredentials(是否允许发送身份验证信息)等,通过这些参数可以更细粒度地控制跨域请求的行为。
全局配置:
你也可以在全局范围内配置 @CrossOrigin,例如在整个控制器类上应用该注解,或者配置在 Spring Boot 应用的全局配置类中,从而统一处理所有的跨域请求需求。
ElementUI
在VUE3中要使用element-plu
npm install element-plus --save
使用该命令安装
全局引入,在main.js中直接引入
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css' 这两行代码就是全局引入createApp(App).use(router).use(ElementPlus).mount('#app') 记得use一下
按需引入
相关文章:

Vue3学习笔记第一天
MVVM Vue是一种用于构建用户界面的JavaScript框架。MVVM 是Vue采用的一种软件架构模式,用于构建交互式的用户界面。它的全称是 Model-View-ViewModel,这三个部分分别代表了应用程序的不同层次和角色: Model(模型)&…...

C++之类与对象(完结撒花篇)
目录 前言 1.再探构造函数 2.类型转换 3.static成员 4. 友元 5.内部类 6.匿名对象 7.对象拷贝时的编译器优化 结束语 前言 在前面的博客中,我们对类的默认成员函数都有了一定了解,同时实现了一个日期类对所学的没内容进行扩展延伸,本…...
代码质量的守护者:Python静态代码分析工具的集成之道
标题:代码质量的守护者:Python静态代码分析工具的集成之道 在软件开发过程中,代码质量是至关重要的一环。Python作为一种流行的编程语言,拥有众多的静态代码分析工具,它们能够在代码运行之前检测潜在的错误和代码风格…...

JVM -- 类加载器
类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现访问接口和类字节码数据的技术。类加载器只负责加载过程中的字节码获取并加载到内存的这一过程。 一、 类加载器的分类 类加载器的详细信息可以使用Arthas通过classloader命令查看: 1.启动类加载器(Boots…...

OLAP引擎之StarRocks
StarRocks 是一款新兴的开源分布式实时分析型数据库,专为高性能、高并发的数据分析场景设计。它结合了传统数据仓库和大数据技术的优势,提供了强大的实时数据处理和分析能力。以下是对 StarRocks 的详细介绍,涵盖其基本概念、核心特性、架构设…...

基于微信小程序的小区业主服务系统(源码+论文+部署讲解等)
博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍:我是程序员阿龙ÿ…...

C++ | Leetcode C++题解之第327题区间和的个数
题目: 题解: class Solution { public:int countRangeSumRecursive(vector<long>& sum, int lower, int upper, int left, int right) {if (left right) {return 0;} else {int mid (left right) / 2;int n1 countRangeSumRecursive(sum,…...

C# Winform 多窗体切换方式一
一、简介 在 Winform 开发中,多窗体的切换是一个常见的需求,比如登录成功后,切换至主界面,在网上查阅相关的资料,你会发现很多都是用 form2.Show(); this.Hide(); 这种方式,这种方式也存在一些问题&#…...

笔记本CPU天梯图(2024年8月),含AMD/骁龙等新CPU
原文地址(高清无水印原图/持续更新/含榜单出处链接): 2024年8月笔记本CPU天梯图 2024年8月笔记本CPU天梯图 2024年8月5日更新日志:常规更新Cinebench R23、PassMark笔记本CPU天梯图,新增Geekbench 6.2单核多核天梯图&…...

GitLab-CI/CD指南
由于公司没有运维,写go服务时各个环境编译部署还是略显麻烦,由于代码管理使用的是 gitlab,所以决定使用 gitlab 自带的 CI/CD 来做自动编译和部署,这样每次提交代码以后就可以自动部署到服务器上了。 gitlab 本身只有 CI/CD 的接…...

io目录操作学习
1、基本概念 目录也是一种文件,因此操作流程与普通文件类似,有诸如打开、关闭、定位等概念,但目录是一种特殊的文件,目录存储的数据的最小单位并不是字符,而是目录项。这使得目录跟普通文件又有区别。 在Linux中&…...
Ant-Design-Vue
Ant-Design-Vue是蚂蚁金服Ant Design官方推荐的Vue版UI组件库,它继承了Ant Design的设计语言和Vue.js的易用性,为开发者提供了丰富、高质量的Vue组件,极大地简化了前端开发流程。以下是一份详细的Ant-Design-Vue快速上手指南及排坑建议&#…...
2024互联网暑期实习面经和流程记录分享
2024互联网暑期实习面经和流程记录分享 面试经验和流程需要注意的点 面试经验和流程 因为敏感信息的原因,这里涉及到公司名字的全部进行打码 笔者投递和面试了很多公司,具体有包括算法和开发岗,下面的公司一律用字母代替。 O公司࿰…...

风云崛起之拉氏变换和拉式逆变换
图像的分割写出来了,但是写的不好,暂时先不发了。这两天小y想在把拉式变换的内容写出来,小y最近再看信号和电路,需要复习数学,所以把这点写出来。 首先要推出分布积分的公式,我们知道积分和微分为逆运算&am…...

1、.Net UI框架:WinUI - .Net宣传系列文章
WinUI(Windows UI Library)是微软提供的一个用于构建Windows应用程序的本机UI平台组件。它与Windows应用SDK紧密相关,允许开发者创建适用于Windows 10及更高版本的应用程序,并且可以发布到Microsoft Store。WinUI 3是最新的一代,它提供了与操…...
计算机的错误计算(五十九)
摘要 讨论用 Go语言实现的 函数的计算精度问题。 由计算机的错误计算(五十五)知,国际 IEEE 754 标准中, 函数具有定义域 . 那么,在常规编程模式下用 Go语言实现这个函数,其输出的精度如何? …...
【数学分析笔记】第1章第1节:集合(1)
作为一个计算机专业的人,想自学一下数学专业的专业课补一补AI基础,顺带写个笔记,听的课是陈纪修版本的数学分析: 1. 集合与映射 1.1 集合 1.1.1 基本概念 集合:由某种特定性质的具体的或抽象的对象汇集的总体。 集…...

计算机毕业设计 校园失物招领网站 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
GIT指令大全详解
目录 GIT指令详解 拉取 提交 分支操作(假设分支为a) 版本回退 主分支拉取到分支 常用的Git指令 一、初始化配置 二、初始化仓库 三、检查当前文件状态 四、添加 五、查看提交历史 六、撤销更改 七、查询 八、分支 九、标签管理 十、其他常用指令 GIT指令详解 Git是一个开源的分…...

ECCV2024,清华百度提出ReSyncer:可实现音频同步嘴唇动作视频生成。
清华&百度等联合提出了ReSyncer,可以实现更高稳定性和质量的口型同步,而且还支持创建虚拟表演者所必需的各种有趣属性,包括快速个性化微调、视频驱动的口型同步、说话风格的转换,甚至换脸。 ReSyncer的工作原理可以简单理解为…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...