【VUE】Vue 组件详解

news2024/9/21 19:55:07

📝个人主页🌹:个人主页
⏩收录专栏⏪:VUE
🌹🌹期待您的关注 🌹🌹,让我们共同进步!
在这里插入图片描述

文章目录

  • 一、Vue 组件的基础概念
    • 1.1 什么是组件?
    • 1.2 组件的作用
    • 1.3 组件组件的本质
    • 1.4 组件的分类(全局组件 vs 局部组件)
  • 二、创建和注册组件
    • 2.1 单文件组件(SFC)
    • 2.2 全局组件注册
    • 2.3 局部组件注册
  • 三、组件命名格式
  • 四、ref 获取 DOM 元素
    • 4.1 基本流程
    • 4.2 获取组件引用
  • 五、ref 操作组件 - defineExpose
    • 5.1 defineExpose 的作用
    • 5.2 使用 defineExpose 暴露组件内部属性和方法
  • 六、总结

一、Vue 组件的基础概念

1.1 什么是组件?

在 Vue 中,组件是可复用的 UI
片段,它封装了特定的功能和外观。可以将组件视为独立的小模块,每个组件负责一部分特定的任务,比如显示一个按钮、一个表单或者一个复杂的页面布局。

1.2 组件的作用

  • 提高可维护性:将应用拆分成多个小的组件,使得每个组件的功能相对单一,易于理解和修改。当应用的某个部分出现问题时,可以快速定位到相应的组件进行修复。
  • 可复用性:一旦创建了一个组件,可以在不同的地方重复使用,减少代码重复。例如,一个通用的输入框组件可以在多个页面中使用。
  • 团队协作:不同的开发人员可以同时开发不同的组件,提高开发效率。

1.3 组件组件的本质

组件的本质是一个带有 template​、script​ 和 style​ 的自包含模块:

  • ​template​​:定义了组件的结构和内容。
    ​- script​​:包含组件的逻辑,如数据、方法和生命周期钩子。
    ​- style​​:定义了组件的样式,可以使用 Scoped CSS 来确保样式仅作用于当前组件。

1.4 组件的分类(全局组件 vs 局部组件)

全局组件:
在整个应用中都可以使用的组件。通过在 Vue 实例创建之前使用 Vue.component() 方法进行注册。例如:
javascript

Vue.component('MyGlobalComponent', {
  template: '<div>Global Component</div>'
});

局部组件:
只在特定的组件内部使用的组件。在组件的选项中通过 components 属性进行注册。例如:
javascript

const App = {
  components: {
    'MyLocalComponent': {
      template: '<div>Local Component</div>'
    }
  }
};

二、创建和注册组件

2.1 单文件组件(SFC)

单文件组件是 Vue 中推荐的组件编写方式,它将一个组件的模板、脚本和样式写在一个以 .vue 为后缀的文件中。例如:

<template>
  <div>
    <h1>{{ message }}</h1>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello from SFC!'
    };
  }
};
</script>

<style scoped>
h1 {
  color: blue;
}
</style>

2.2 全局组件注册

如前所述,使用 Vue.component() 方法进行全局注册。例如:

import MyGlobalComponent from './MyGlobalComponent.vue';

Vue.component('MyGlobalComponent', MyGlobalComponent);

2.3 局部组件注册

在父组件的选项中通过 components 属性进行注册。例如:

import MyLocalComponent from './MyLocalComponent.vue';

const App = {
  components: {
    'MyLocalComponent': MyLocalComponent
  }
};

三、组件命名格式

组件的命名可以使用驼峰式命名法或短横线分隔命名法。在注册组件时,需要保持命名的一致性。例如:

// 驼峰式命名
const MyComponent = { /*... */ };
Vue.component('MyComponent', MyComponent);

// 短横线分隔命名
const my-component = { /*... */ };
Vue.component('my-component', my-component);

四、ref 获取 DOM 元素

4.1 基本流程

在 Vue 中,可以使用 ref 属性来获取 DOM 元素或组件实例。首先,在模板中给元素或组件添加 ref 属性。例如:

<template>
  <div>
    <input ref="myInput" />
  </div>
</template>

然后,在脚本中可以通过 this.$refs 来访问这个元素或组件。

4.2 获取组件引用

同样可以使用 ref 属性来获取子组件的引用。例如:

<template>
  <div>
    <child-component ref="myChildComponent" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  mounted() {
    console.log(this.$refs.myChildComponent);
  }
};
</script>

五、ref 操作组件 - defineExpose

5.1 defineExpose 的作用

在默认情况下,通过 ref 获取到的子组件实例只能访问子组件中通过 defineExpose 暴露出来的属性和方法。

5.2 使用 defineExpose 暴露组件内部属性和方法

在子组件中,使用 defineExpose 来指定哪些属性和方法可以被外部访问。例如:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="changeMessage">Change Message</button>
  </div>
</template>


<script>
import { defineExpose } from 'vue';

export default {
  data() {
    return {
      message: 'Initial message',
    };
  },
  methods: {
    changeMessage() {
      this.message = 'Updated message';
    },
  },
  expose: ['message', 'changeMessage'] // 或者使用 defineExpose 函数
};
</script>

在父组件中,可以通过 ref 获取子组件实例,并调用暴露出来的方法和访问属性。例如:

<template>
  <div>
    <child-component ref="myChild" />
    <button @click="updateChildMessage">Update Child Message</button>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    updateChildMessage() {
      this.$refs.myChild.changeMessage();
      console.log(this.$refs.myChild.message);
    }
  }
};
</script>

六、总结

Vue 组件是构建强大和可维护应用的关键。通过理解组件的基础概念、掌握创建和注册组件的方法,以及利用 ref 和 defineExpose 等特性,可以更加高效地开发 Vue 应用。在实际开发中,根据项目的需求合理地组织和使用组件,将大大提高开发效率和代码质量。

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

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

相关文章

Unity教程(十五)敌人战斗状态的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

u盘显示需要格式化才能用预警下的数据拯救恢复指南

U盘困境&#xff1a;需要格式化的紧急应对 在数字信息爆炸的时代&#xff0c;U盘作为便携的数据存储介质&#xff0c;承载着我们工作、学习乃至生活中的大量重要资料。然而&#xff0c;当U盘突然弹出“需要格式化才能用”的提示时&#xff0c;这份便捷瞬间转化为焦虑与不安。这…

MiniCPM-V: A GPT-4V Level MLLM on Your Phone

MiniCPM-V: A GPT-4V Level MLLM on Your Phone 研究背景和动机 现有的MLLM通常需要大量的参数和计算资源&#xff0c;限制了其在实际应用中的范围。大部分MLLM需要部署在高性能云服务器上&#xff0c;这种高成本和高能耗的特点&#xff0c;阻碍了其在移动设备、离线和隐私保…

通信工程学习:什么是AM标准调幅

AM标准调幅 AM标准调幅&#xff0c;即Amplitude Modulation&#xff08;振幅调制&#xff09;&#xff0c;是一种在电子通信中广泛使用的调制方法&#xff0c;特别是在无线电载波传输信息方面。以下是关于AM标准调幅的详细解释&#xff1a; 一、AM标准调幅的定义与原理 AM标准…

机器视觉硬件选型根据某项目相机镜头

一 项目总需求 1、大视野检测需求: (1)大视野&#xff1a; ①产品尺寸15.6寸屏幕&#xff0c;产品大小&#xff1a;350mm x 225mm&#xff1b; ②产品料盘尺寸大小&#xff1a;565mm x 425mm; ③工作距离&#xff1a;880mm&#xff1b;检测精度&#xff1a;500μm&#xff…

如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?

如何使用 ef core 的 code first 模式实现自定义类型转换器 前言 1. 项目结构2. 实现步骤2.1 定义转换器2.1.1 DateTime 转换器2.1.2 JsonDocument 转换器 2.2 创建实体类并配置数据结构类型2.3 定义 Utility 工具类2.4 配置 DbContext2.4.1 使用 EF Core 配置 DbContext 的两种…

浅谈人工智能之基于AutoGen Studio+Ollama本地大模型构建AI Agent

浅谈人工智能之基于AutoGen Studio+Ollama本地大模型构建AI Agent 摘要 随着人工智能技术的飞速发展,大型语言模型已成为推动创新应用的关键力量。然而,云服务的使用虽然便捷,但面临着数据安全、延迟及成本等挑战。为解决这些问题,越来越多的开发者选择在本地部署大模型。…

python学习11-Pytorch张量与数据处理1

ndarray 首先&#xff0c;我们介绍n维数组&#xff0c;也称为张量&#xff08;tensor&#xff09;。 使用过Python中NumPy计算包的读者会对本部分很熟悉。 无论使用哪个深度学习框架&#xff0c;它的张量类&#xff08;在MXNet中为ndarray&#xff0c; 在PyTorch和TensorFlow中…

数据集 CrowdPose 多人姿态估计 深度学习 >> DataBall

数据集 CrowdPose 多人姿态估计 深度学习 CrowdPose 数据集 这是一个用于探讨在拥挤场景中的多人姿态估计的图像数据集。该数据集包括 2 万张图像和标注有 14 个关键点的 8 万个人体姿势&#xff0c;其中测试集包括 8,000 张图像。 article{li2018crowdpose, title{CrowdPose…

mysql-PXC实现高可用

mysql8.0使用PXC实现高可用 什么是 PXC PXC 是一套 MySQL 高可用集群解决方案&#xff0c;与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题&#xff0c;基本上可以达到实时同步。而且节点与节点之间&#xff0c;他们相互的关系是…

数据预处理与协同过滤推荐算法——从数据清洗到个性化电影推荐

推荐系统在现代应用中占据了重要地位&#xff0c;尤其在电影、音乐等个性化内容推荐中广泛使用。本文将介绍如何使用数据预处理、特征工程以及多种推荐算法&#xff08;包括协同过滤、基于内容的推荐、混合推荐等&#xff09;来实现电影推荐系统。通过Pandas、Scikit-learn、Te…

研1日记5

x torch.tensor(x),numpy 转tensor 三维矩阵相加 screen -S pid 进入之前创建好的screen transpose()只能一次操作两个维度&#xff1b;permute()可以一次操作多维数据&#xff0c;且必须传入所有维度数&#xff0c; transpose()中的dim没有数的大小区分&#xff1b;permut…

Redis 分布式锁:线程安全在分布式环境中的解决方案

Redis 分布式锁&#xff1a;线程安全在分布式环境中的解决方案 一 . 分布式锁二 . 分布式锁的实现策略2.1 引入 setnx2.2 引入过期时间2.3 引入校验 ID2.4 引入 lua 脚本2.5 引入看门狗2.6 引入 redlock 算法 Hello , 大家好 , 这个专栏给大家带来的是 Redis 系列 ! 本篇文章给…

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加&#xff0c;控制这些设备的需求也在增加。对于多种使用情况&#xff0c;期望设备在需要进行控制的同时连接到互联网会受到很大限制&#xff0c;因此是不可行的。在这些情况下&#xff0c;使用低功耗蓝牙&#xff08;也称为 Bluetooth LE 或 BLE&#xf…

[yolov5] --- yolov5入门实战「土堆视频」

1 项目介绍及环境配置 下载yolov5 tags 5.0源码&#xff0c;https://github.com/ultralytics/yolov5/tree/v5.0&#xff0c;解压 Pycharm 中创建conda虚拟环境 激活conda虚拟环境 根据作者提供的requirements.txt文件&#xff0c;pip install -r requirements.txt 如果作者没有…

【Spring Boot】 SpringBoot自动装配-Condition

目录 一、前言二、 定义2.1 Conditional2.2 Condition2.2.1 ConditionContext 三、 使用说明3.1 创建项目3.1.1 导入依赖3.1.2 添加配置信息3.1.3 创建User类3.1.4 创建条件实现类3.1.5 修改启动类 3.2 测试3.2.1 当user.enablefalse3.2.2 当user.enabletrue 3.3 小结 四、改进…

如何实现加密功能

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容&#xff0c;本章回中将介绍一个加密工具包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

基于YOLO8的图片实例分割系统

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 segment_app.py 二、核心代码介绍篇2.1 segment_app.py2.2 scan_taskflow.py 三、结语 代码资源&#xff1a;计算机视觉领域YOLO8技术的图片实例分割…

0x05 tomcat AJP文件包含漏洞(CVE-2020-1938)复现(脚本最终没有验证成功)

参考&#xff1a; 13-3 tomcat AJP文件包含漏洞&#xff08;CVE-2020-1938&#xff09;_omcat ajp文件包含漏洞 payload-CSDN博客 一、fofa 搜索使用该服务器的网站 网络空间测绘&#xff0c;网络空间安全搜索引擎&#xff0c;网络空间搜索引擎&#xff0c;安全态势感知 - F…

linux编译器——gcc/g++

1.gcc linux上先要安装&#xff0c; sudo yum install gcc gcc --version 可以查看当前的版本 &#xff0c;我们默认安装的是4.8.5的版本&#xff0c;比较低&#xff0c; gcc test.c -stdc99 可以使他支持更高版本的c标准 -o 可以殖指明生成文件的名字&#xff0c;可以自己…