当前位置: 首页 > news >正文

【VUE】Vue 组件详解

📝个人主页🌹:个人主页
⏩收录专栏⏪: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 应用。在实际开发中,根据项目的需求合理地组织和使用组件,将大大提高开发效率和代码质量。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【SpringBoot】使用Redis
  • 一文搞懂 | Pytorch维度转换操作:view,reshape,permute,flatten函数详解
  • linux中vim常用命令大全
  • 微软RD客户端 手机 平板 远程控制 Windows桌面
  • 【Linux】进程优先级|进程切换
  • 【机器学习-神经网络】循环神经网络
  • GateWay三大案例组件
  • 后端开发刷题 | 最长公共子序列(非连续)
  • 科研绘图系列:R语言PCoA图(PCoA plot)
  • 店匠科技携手Stripe共谋电商支付新篇章
  • 前端知识HTMLCSS
  • 从供货上游到下游消费者平台搭建 多商家供货供应链商城开发关键点
  • RabbitMQ 02 操作,配置信息,用户权限
  • 提升效率!ArcGIS中创建脚本工具
  • Unity(2022.3.41LTS) - UI详细介绍- Panel(面板)和RectTransform组件
  • 《剑指offer》分解让复杂问题更简单
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Android系统模拟器绘制实现概述
  • iOS编译提示和导航提示
  • Java 网络编程(2):UDP 的使用
  • JavaScript学习总结——原型
  • Java超时控制的实现
  • JAVA之继承和多态
  • js ES6 求数组的交集,并集,还有差集
  • JS笔记四:作用域、变量(函数)提升
  • Material Design
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • OSS Web直传 (文件图片)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • web标准化(下)
  • 关于使用markdown的方法(引自CSDN教程)
  • 回流、重绘及其优化
  • ------- 计算机网络基础
  • 前端性能优化--懒加载和预加载
  • 入口文件开始,分析Vue源码实现
  • 使用putty远程连接linux
  • 通过npm或yarn自动生成vue组件
  • 想写好前端,先练好内功
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $NOIp2018$劝退记
  • (+4)2.2UML建模图
  • (初研) Sentence-embedding fine-tune notebook
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (详细文档!)javaswing图书管理系统+mysql数据库