Vue3学习笔记第一天

news2024/11/13 19:45:20

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/,浏览器访问
在这里插入图片描述
访问后如图:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/607b6f9ac2ba4c4481474d477a7c6069.png

项目结构

创建项目后,项目内会自动生成一些默认文件:
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一下

按需引入
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer &#xff08;SP) 4.1.3 Program Counter &#xff08;PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register &#xff08;SPSR&#xff09; 4.2 Proc…

性能测试基础概念

前言&#x1f440;~ 上一章我们介绍了单元测试Junit的使用&#xff0c;今天我们来讲解一下性能测试的一些基础概念为后面我们进行性能测试做铺垫 什么是性能测试&#xff1f; 性能测试和功能测试有什么区别&#xff1f; 影响一个软件性能因素有哪些&#xff1f; 为什么要进…

循环神经网络和自然语言处理一

目录 一.分词 1.分词工具 2.分词的方法 3.N-gram表示方法 二.向量化 1.one-hot编码 2.word embedding 3.word embedding API 4.数据形状改变 既然是自然语言&#xff0c;那么就有字&#xff0c;词&#xff0c;句了 一.分词 1.分词工具 tokenization&#xff0c;jie…

Outlook Pst文件大小最大多大?如何分开缩减?

簡介 預設情況下&#xff0c;personal Folders (.pst) 和離線 Outlook Data File (.ost) 檔案在 Microsoft Outlook 2010 和 Outlook 2013 中為 Unicode 格式。 .pst 和 .ost 檔案的整體大小有 50 GB 的預先設定限制。 此限制大於 2007 和 Outlook 2003 Outlook Unicode .pst …

零基础5分钟上手亚马逊云科技AWS核心云开发/云架构知识 - 成本分析篇

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;让大家零基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我将每天介绍一个基于亚马逊云科…

数据结构 - 相邻节点迭代器

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、相邻节…

nuxt3实战:完整的 nuxt3 + vue3 项目创建与useFetch请求封装

一. 安装 pnpm dlx nuxilatest init <project-name>// ornpx nuxilatest init <project-name>如遇到报错 手动安装&#xff1a; 浏览器访问报错https请求地址&#xff1a; 点击tar(项目初始文件的下载地址)对应地址,下载starter-3.tar.gz 包到本地 本地创建项…

【Android】使用网络技术——WebView的用法、http协议、OKHttp、解析XML、JSON格式数据笔记整理

WebView的用法 新建一个WebView项目 修改activity_main中的代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/main"and…

STM32F1之SysTick系统定时器详细解析

目录 1. 简介 2. SysTick功能框图 3. SysTick寄存器 3.1 SysTick控制及状态寄存器 3.2 SysTick重装载数值寄存器 3.3 SysTick当前数值寄存器 3.4 SysTick校准数值寄存器 4. SysTick定时时间计算 5. SysTick寄存器结构体 6. 写一个us级延时函数 7. 写一个…

240806-RHEL 无法通过 ssh username@ip 远程连接,报错:Connection closed by ip port 22

A. 原因排查 遇到这个错误通常意味着 SSH 服务可能在目标主机上没有正常运行&#xff0c;或有防火墙/网络配置问题。以下是一些排查步骤&#xff1a; 检查 SSH 服务状态&#xff1a; 确认 SSH 服务是否正在目标主机上运行。 sudo systemctl status sshd重启 SSH 服务&#xff…

探索 Python 异步通信的奥秘:WebSockets 库的神奇之旅

文章目录 探索 Python 异步通信的奥秘&#xff1a;WebSockets 库的神奇之旅背景&#xff1a;为何选择 WebSockets&#xff1f;什么是 websockets 库&#xff1f;安装 websockets 库5个简单的库函数使用方法场景应用示例常见问题与解决方案总结 探索 Python 异步通信的奥秘&…

用Manim实现三维坐标系的绘制

1.ThreeDAxes 函数 ThreeDAxes是 Manim 中用于创建三维坐标系的类。在manim中常用的三位坐标绘制函数是&#xff1a; class ThreeDAxes(x_range(-6, 6, 1), y_range(-5, 5, 1), z_range(-4, 4, 1), x_length10.5, y_length10.5, z_length6.5, z_axis_configNone, z_normala…

数据仓库怎么建设?一文详解数仓的建设过程!

随着信息技术的飞速发展&#xff0c;企业不仅需要存储和管理海量数据&#xff0c;更迫切需要从这些数据中提取有价值的信息&#xff0c;以支持复杂的决策制定过程。数据仓库不仅是存储数据的场所&#xff0c;更是支持复杂查询、报告和数据分析的强有力工具&#xff0c;其建设已…

JavaScript异步简介|Promise快速入门

异步&#xff08;Asynchronous, async&#xff09;是与同步&#xff08;Synchronous, sync&#xff09;相对的概念。 异步 JavaScript 简介 异步编程技术使你的程序可以在执行一个可能长期运行的任务的同时继续对其他事件做出反应而不必等待任务完成。与此同时&#xff0c;你…

Linux工具|运维工具rename常用命令详解

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

【vulnhub】Wakanda :1靶机

靶机安装 下载地址&#xff1a;https://download.vulnhub.com/wakanda/wakanda-1.ova 运行环境&#xff1a;Virtual Box 信息收集 靶机IP扫描 netdiscover -i eth0 -r 192.168.7.0/24 端口扫描 nmap -A 192.168.7.243 -p- 80端口开启了http服务&#xff0c;在3333端口开启…

案例研究丨盛泰光电携手DataEase实现数据驱动智能制造

盛泰光电科技股份有限公司&#xff08;以下简称为“盛泰光电”&#xff09;是中国第一批摄像头模组制造企业。自成立至今&#xff0c;一直专注于手机摄像头模组的研发、制造、销售与服务&#xff0c;并向非手机包括笔记本、车载、医疗、AIoT等领域延伸&#xff0c;形成以手机摄…

PHP + Laravel + RabbitMQ + Redis 实现消息队列 (二) 消费队列在RabbitMQ和redis中的简单使用

最简单的队列功能 RabbitMQ和消息传递通常会使用一些术语&#xff1a; 生产者&#xff08;Producer&#xff09;意味着发送消息。一个发送消息的程序称为生产者。队列&#xff08;Queue&#xff09;尽管消息通过RabbitMQ和您的应用程序流动&#xff0c;但它们只能存储在队列中…

数据结构(01):数据结构概述(基本术语、逻辑结构和物理结构)

1、数据结构概述 (1)基本术语 A.数据元素 具有一定意义的基本单位。如人类的数据元素是人&#xff08;张三、李四等&#xff09;。 B.数据项 可以看作是数据元素的属性。如人的属性&#xff08;姓名、年龄、身高等&#xff09; C.数据对象 性质相同的数据元素的集合。如某一栋…

群聊的创建 表情包发送 图片发送

目录 群聊&#xff1a; ​编辑 表情包发送&#xff1a; 图片发送&#xff1a; 群聊&#xff1a; 1.群资料的表groupinformation 字段&#xff1a;GroupId 群id&#xff0c;GroupName 群名&#xff0c;CreatTime 创群时间&#xff0c;CreatUserId 创群的人&#xff0c;…