Javaweb 14.3 Vue3 和 Vite
目录
Vue
Vue 介绍
Vue 快速体验(非工程化方式)
Vue3 通过 Vite 实现工程化
Vite 介绍
Vite 创建 Vue3 工程化项目
Vite + Vue3 项目的创建,启动,停止
Vite + Vue3 项目的目录结构编辑
Vite + Vue3 项目组件
Vite + Vue3 的css 样式的导入方式:
Vite + Vue3 响应式入门和 setup 函数
完!
Vue
Vue 介绍
Vue 是一款用于构建用户界面的 JavaScript 框架,帮助我们高效地开发用户界面。
Vue 的两个核心功能:
声明式渲染:Vue 基于标准 HTML 拓展了一套模板语法,使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系
响应式:Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM
Vue 快速体验(非工程化方式)
创建一个新的项目 demo-vue01,在 index.html 中的 script 标签中导入 vue3 的 js 文件。导入 js 文件,我们可以在本地将 js 文件导入,不用一次又一次的通过浏览器请求访问
在 body 中,有如下代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><!-- 导入 vue 的依赖 核心的vue3的js文件 --><!-- 打开网站:http://unpkg.com/vue@3/dist/vue.global.js 将里面的所有内容粘贴到 js/vue.js 中--><script src = "./js/vue.js"></script>
</head>
<body><div id = "app"><h1 v-text = "message" v-bind:style="colorStyle"></h1><h1>{{message}}</h1><button @click="fun1()">change</button></div><script>const app = Vue.createApp({setup(){// 定义数据 以变量/对象的形式let message = "hello"let headline = "vue"let colorStyle = {"background-color":"blue"}function fun1(){alert("hello")}// 载 return 中返回变量/方法 才能够和 HTML 元素关联return {message,headline,colorStyle,fun1}}})// 将 app 对象挂载在指定的元素上,被挂载的元素内部就可以通过 vue 框架实现数据的渲染了app.mount("#app")</script>
</body>
</html>
Vue3 通过 Vite 实现工程化
Vite 介绍
我们载前面学习 Javaweb 项目的时候,了解了其基础的目录和文件。包含 src 和 web 文件,web 文件中包含 WEB-INF,WEB-INF 中包含 web.xml,这就是其项目的一个工程化的目录文件。
前端项目也是有一定的工程化标准的,因其基础的目录结构和文件较多较繁琐,我们使用 vite 进行构建~
Vite 创建 Vue3 工程化项目
Vite + Vue3 项目的创建,启动,停止
在终端控制台进行如下操作~
执行完毕后,就会为我们创建这个项目:
可以打开 package.json 文件,发现其中是有相关依赖的,但是我们的项目中并没有对应的 node_modules ,是因为,尽管 package.json 中已经声明了相关依赖,但其实并没有真实的导入进来,我们可以执行 npm i 命令来进行下载~
打开 http://localhost:5173/ 就可以打开初始页面了
这样,我们就使用 vite 构建了一个工程化的项目~
在命令行中输入 Ctrl + C 就可以停止项目~
补充:因为我们的 nodejs 的版本是18.16.0,所以当我们 create vite 的时候,一定要指定版本,如果不指定,会自动下载最新的版本,可能会不兼容~
Vite + Vue3 项目的目录结构
public 目录:用于存放一些公共资源,例如 HTML 文件,图片,字体等。这些资源会直接被复制到构建出来的目标目录中
src 目录:存放项目的源代码,包括 JavaScript CSS Vue 组件 图像和字体资源等。以下是 src 内部划分建议:
1. asset 目录:用于存放一些项目中用到的静态资源。
2. components 目录:用于存放香瓜的文件。组件是代码复用的一种方式,用于抽象处一个可以复用的 UI 组件,方便在不同的场景中进行重复使用。
3. layouts 目录:用于存放布局组件的文件。布局组件通常负责整个应用程序的整体布局,例如头部,底部,导航菜单等。
4. pages 目录:用于存放页面级别的组件文件,通常是路由对应的组件文件。
5. plugins 目录:用于存放 Vite 插件相关的文件。
6. router 目录:用于存放 Vue.js 的路由配置文件,负责管理视图和 URL 之间的映射关系。
7. store 目录:用于存放 Vuex 状态管理的相关文件
8. utils 目录:用于存放一些二通用的工具函数
vite.config.js 文件:Vite 的配置文件。可以使用 ES6 模块的语法进行配置
package.json 文件:标准的 Node.js 项目配置文件。
Vite 项目的入口为 src/main.js 文件,也是整个前端应用程序的入口文件。
vite 的运行界面:
在安装了 vite 的项目中,可以在 npm scripts 中使用 vite 可执行文件。
运行设置端口号:(vite.config.js)
Vite + Vue3 项目组件
VUE组件:
一个页面作为整体,是由多个部分组成的,每个部分就可以被理解为一个组件
每个 .vue 文件就可以理解为一个组件,多个 .vue 文件可以构成一个整体页面
组件化给我们带来的另一个好处就是组件的复用和维护都十分方便
.vue 文件:
传统的页面有 html 文件 css 文件和 js 文件三个文件组成(多文件组件)
vue 将这些文件合成一个 vue 文件(Single-File Component 简称 SFC 单文件组件)
vue 文件对 js/css/html 统一封装,该文件由三个部分组成:<script><template><style>
script标签:代表组件的 js 代码,代替传统的 js 文件
template标签:代表组件的 html 代码,代替传统的 html 文件
style标签:代表组件的 css 代码,代替传统的 css 文件
工程化 vue 项目如何组织这些组件?
index.html 是项目的入口,其中<div id = "app"></div> 是用于挂在所有组件的元素
src = "/src/main.js",index.html 中的 script 标签中引入了一个 main.js 文件,具体的挂在过程在 main.js 中执行
main.js 是 vue 工程中非常重要的文件,决定了这个项目使用那些依赖~
在 main.js 中导入的 App.vue 组件也是 vue 中的核心组件,所有的其他组件都要通过该组件来进行导入,该组件可以通过路由来控制页面的切换
可以在 App.vue 中导入其他 .vue 文件
这样通过 App.vue 导入了其他 vue 组件~
整体流程图:
Vite + Vue3 的css 样式的导入方式:
1. 在 .vue 文件中的 style 标签中
2. 将 css 样式独立保存到 css 文件中,那个 .vue 文件需要,就在那里导入即可~
导入外部的 css 文件,可以在 script 标签中导入,也可以在 style 标签中导入
Vite + Vue3 响应式入门和 setup 函数
再使用 vite 创建一个 vue + JavaScript 项目:
App.vue
Vue3 响应式数据入门:
<script>
// 存储 vue 页面逻辑 js 代码
export default {setup() {// 定义一些要展示到 HTML 上的一些数据 变量 / 对象let counter = 1;// 让 counter 自增的方法function counterIncr(){counter++}// 让 counter 自减的方法function counterDecr() {counter--}// 显示 counter 值的方法function showCounter() {alert(counter)}return {counter,counterIncr,counterDecr,showCounter,};},
};
</script><!-- 页面的样式的 html 代码 -->
<template><div><button @click="counterIncr()">+</button><span v-text="counter"></span><button @click="counterDecr()">-</button><button @click="showCounter()">showCounter</button></div>
</template><style scoped>
/* 存储的是 css 代码。 scoped 的意思是 Vue.js 单文件组件中用于设置组件样式的一种方式它的含义是将样式局限在当前组件中,不对全局样式造成影响
*/
</style>
按照理解,我们可以写出上述代码,但是当我们运行,发现页面中间的 counter 并不会变化,但当 showCounter 方法执行的时候,弹出的 counter 的确发生了变化。
==》
响应式数据:在数据变化时,vue 框架会将变量最新的值,更新到 dom 树中,页面数据就是实时最新的
非响应式布局:在数据变化时,vue 框架不会将变量最新的值,更新到 dom 树中,页面数据并不是实时最新的
在 vue2 中,数据不做特殊处理,默认就是响应式的。
vue3 中,数据要经过 ref / reactive 函数的处理才是响应式的
ref reactive 函数是 vue 框中给我们提供的方法,导入进来就可以使用
ref 处理的响应式数据,在操作的时候需要注意:
在 script 标签中,操作 ref 的响应式的数据需要通过 .value 的形式操作
在 template 标签中,操作 ref 的响应式的数据就可以直接使用了,无需 .value 的形式