Vue----组件基础

简介: Vue----组件基础

1 单页面应用程序

1.1 什么是单页面应用程序

单页面应用程序(英文名:Single Page Application)简称 SPA,顾名思义,指的是一个 Web 网站中只有唯一的一个 HTML 页面,所有的功能与交互都在这唯一的一个页面内完成。

1.2 单页面应用程序的特点

1.单页面应用程序将所有的功能局限于一个 web 页面中,仅在该 web 页面初始化时加载相应的资源( HTML、JavaScript 和 CSS)。

2.一旦页面加载完成了,SPA 不会因为用户的操作而进行页面的重新加载或跳转。而是利用 JavaScript 动态地变换HTML 的内容,从而实现页面与用户的交互。

1.3 单页面应用程序的优缺点

1.3.1 单页面应用程序的优点

SPA 单页面应用程序最显著的 3 个优点如下:

① 良好的交互体验

单页应用的内容的改变不需要重新加载整个页面

获取数据也是通过 Ajax 异步获取

没有页面之间的跳转,不会出现“白屏现象”

② 良好的前后端工作分离模式

后端专注于提供 API 接口,更易实现 API 接口的复用

前端专注于页面的渲染,更利于前端工程化的发展

③ 减轻服务器的压力

服务器只提供数据,不负责页面的合成与逻辑的处理,吞吐能力会提高几倍

1.3.2 单页面应用程序的缺点

任何一种技术都有自己的局限性,对于 SPA 单页面应用程序来说,主要的缺点有如下两个:

① 首屏加载慢

路由懒加载

代码压缩

CDN 加速

网络传输压缩

② 不利于 SEO

SSR 服务器端渲染

1.4 如何快速创建 vue 的 SPA 项目

vue 官方提供了两种快速创建工程化的 SPA 项目的方式:

① 基于 vite 创建 SPA 项目

② 基于 vue-cli 创建 SPA 项目

vite vue-cli
支持的 vue 版本 仅支持 vue3.x 支持 3.x 和 2.x
是否基于 webpack
运行速度 较慢
功能完整度 小而巧(逐渐完善) 大而全
是否建议在企业级开发中使用 目前不建议 建议在企业级开发中使用

2 vite 的基本使用

2.1 创建 vite 的项目

按照顺序执行如下的命令,即可基于 vite 创建 vue 3.x 的工程化项目:

npm init vite-app 项目名称
cd 项目名称
npm install
npm run dev

2.1.1 在对应的文件夹下打开命令窗口

2.1.2 运行 npm init vite-app 项目名称

2.1.3 运行 cd 项目名称

2.1.4 运行 npm install

2.1.5 运行

2.1.6 打开网站

2.2 梳理项目的结构

使用 vite 创建的项目结构如下:

其中:

node_modules 目录用来存放第三方依赖包

public 是公共的静态资源目录

src 是项目的源代码目录(程序员写的所有代码都要放在此目录下)

.gitignore 是 Git 的忽略文件

index.html 是 SPA 单页面应用程序中唯一的 HTML 页面

package.json 是项目的包管理配置文件

在 src 这个项目源代码目录之下,包含了如下的文件和文件夹:

其中:

assets 目录用来存放项目中所有的静态资源文件(css、fonts等)

components 目录用来存放项目中所有的自定义组件

App.vue 是项目的根组件

index.css 是项目的全局样式表文件

main.js 是整个项目的打包入口文件

2.3 vite 项目的运行流程

在工程化的项目中,vue 要做的事情很单纯:通过 main.js 把 App.vue 渲染到 index.html 的指定区域中。

其中:

① App.vue 用来编写待渲染的模板结构

② index.html 中需要预留一个 el 区域

③ main.js 把 App.vue 渲染到了 index.html 所预留的区域中

2.3.1 在 App.vue 中编写模板结构

清空 App.vue 的默认内容,并书写如下的模板结构:

<template>
  <h1>App 组件</h1>
</template>
<script>
export default {
  name: 'App'
}
</script>
<style>
</style>

2.3.2 在 index.html 中预留 el 区域

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <link rel="icon" href="/favicon.ico" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vite App</title>
</head>
<body>
  <!-- index.html 中预留 el 区域 -->
  <div id="app"></div>
  <script type="module" src="/src/main.js"></script>
</body>
</html>

2.3.3 在 main.js 中进行渲染

按照 vue 3.x 的标准用法,把 App.vue 中的模板内容渲染到 index.html 页面的 el 区域中:

// 1.导入创建Vue单页面应用程序实例对象的函数
import { createApp } from 'vue'
// 2.导入对应需要渲染的App组件
import App from './App.vue'
// 3.创建单页面应用程序实例对象
const app = createApp(App)
// 4.调用mount()方法把App组件渲染到index.html中指定的el区域
app.mount( '#app' )

注意:

在Vue3可以有多个根节点,不用在最外包一层div。

3 组件化开发思想

3.1 什么是组件化开发

组件化开发指的是:根据封装的思想,把页面上可重用的部分封装为组件,从而方便项目的开发和维护。

例如:http://www.ibootstrap.cn/ 所展示的效果,就契合了组件化开发的思想。用户可以通过拖拽组件的

方式,快速生成一个页面的布局结构。

3.2 组件化开发的好处

前端组件化开发的好处主要体现在以下两方面:

提高了前端代码的复用性和灵活性

提升了开发效率和后期的可维护性

3.3 vue 中的组件化开发

vue 是一个完全支持组件化开发的框架。vue 中规定组件的后缀名是 .vue。之前接触到的 App.vue 文件本质上就是一个 vue 的组件。

4 vue 组件的构成

4.1 vue 组件组成结构

每个 .vue 组件都由 3 部分构成,分别是:

template -> 组件的模板结构

script -> 组件的 JavaScript 行为

style -> 组件的样式

其中,每个组件中必须包含 template 模板结构,而 script 行为和 style 样式是可选的组成部分。

4.2 组件的 template 节点

vue 规定:每个组件对应的模板结构,需要定义到<template> 节点中。

<template>
  <!-- 当前组件的 DOM 要定义到 template 标签内 -->
</template>

注意:<template> 是 vue 提供的容器标签,只起到包裹性质的作用,它不会被渲染为真正的 DOM 元素。

4.2.1 在 template 中使用指令

在组件的 <template>节点中,支持使用前面所学的指令语法,来辅助开发者渲染当前组件的 DOM 结构。

4.2.2 在 template 中定义根节点

在 vue 2.x 的版本中,<template>节点内的 DOM 结构仅支持单个根节点。

<template>
  <div>
  <!-- 当前组件的 DOM 要定义到 template 标签内的 div 标签内 -->
  </div>
</template>

在 vue 3.x 的版本中,<template> 中支持定义多个根节点:

<template>
  <!-- 当前组件的 DOM 要定义到 template 标签内 -->
    <div>
    <h1></h1>
  </div>
  <h2></h2>
</template>

4.3 组件的 script 节点

vue 规定:组件内的 <script>节点是可选的,开发者可以在 <script>节点中封装组件的 JavaScript 业务逻辑。

<script >节点的基本结构如下:

<script>
//今后,组件相关的 data数据、methods方法等,
//都需要定义到export default所导出的对象中。
export default {}
</script>

4.3.1 script 中的 name 节点

可以通过 name 节点为当前组件定义一个名称:

<script>
export default {
  //name属性指向的是当前组件的名称(建议:每个单词的首字母大写>
  name: 'My![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/b92cb4ad79c54fb0b69d26b355ee2fb6.png)
App'
}
</script>

在使用 vue-devtools 进行项目调试的时候,自定义的组件名称可以清晰的区分每个组件:

4.3.2 script 中的 data 节点

vue 组件渲染期间需要用到的数据,可以定义在 data 节点中。

vue 规定:组件中的 data 必须是一个函数,不能直接指向一个数据对象。

<template>
  <h1>App 组件</h1>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      username: 'zs'
    }
  }
}
</script>
<style>
</style>`

4.3.3 script 中的 methods 节点

组件中的事件处理函数,必须定义到 methods 节点中。

<template>
  <h1>App 组件</h1>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      username: 'zs'
    }
  },
  methods: {
    sayHello() {
      console.log( 'Hello' )
    }
  }
}
</script>
<style>
</style>

4.4 组件的 style 节点

vue 规定:组件内的 <style>节点是可选的,开发者可以在 <style>节点中编写样式美化当前组件的 UI 结构。<script > 节点的基本结构如下:

<style lang="css">
  h1 {
    color: aquamarine;
  }
</style>

其中

4.4.1 让 style 中支持 less 语法

如果希望使用 less 语法编写组件的 style 样式,可以按照如下两个步骤进行配置:

① 运行 npm install less -D 命令安装依赖包,从而提供 less 语法的编译支持

npm install less -D

② 在 <style>标签上添加 lang=“less” 属性,即可使用 less 语法编写组件的样式

<style lang="less" scoped>
  h1 {
    color: aquamarine;
    span {
      color: aqua;
    }
  }
</style>

其中,scoped 表示 style 中的样式只在该组件内生效。


相关文章
|
7天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
7天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
7天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)
|
13天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
1天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
15 7
|
1天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
13天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
13天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
12天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
12天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
下一篇
无影云桌面