Vue.js 组件化开发:父子组件通信与组件注册详解

news/2025/1/15 18:27:38/

Vue.js 组件化开发:父子组件通信与组件注册详解

在这里插入图片描述
简介:
在 Vue.js 的开发中,组件是构建应用的重要基础。掌握组件的创建与使用,尤其是父子组件的通信和组件的注册与命名,是开发中不可或缺的技能。本文将详细探讨这些内容,并提供 Vue 2 和 Vue 3 的代码示例,帮助初学者深入理解和应用这些技术。

目标:
本文旨在帮助读者理解 Vue.js 中父子组件通信的原理,以及如何有效地注册和命名组件。读者将学会使用 propsevents 进行组件间的通信,并掌握组件的全局和局部注册方法。


文章目录

    • Vue.js 组件化开发:父子组件通信与组件注册详解
      • 主要内容
        • 1. 父子组件通信(Props 和 Events)
          • 1.1 父组件向子组件传递数据(Props)
          • 1.2 子组件向父组件发送消息(Events)
        • 2. 组件注册与命名
          • 2.1 全局注册
          • 2.2 局部注册
          • 2.3 组件命名规范
      • 总结

主要内容

1. 父子组件通信(Props 和 Events)

什么是父子组件通信?
父子组件通信是指在 Vue.js 应用中,父组件与子组件之间进行数据和事件的传递。这通常通过 propsevents 来实现。

1.1 父组件向子组件传递数据(Props)

Vue 2 示例代码

父组件 (ParentComponent.vue):

<template><div><h1>父组件</h1><ChildComponent :message="parentMessage" /></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},data() {return {parentMessage: '来自父组件的信息'};}
};
</script>

子组件 (ChildComponent.vue):

<template><div><h2>子组件</h2><p>{{ message }}</p></div>
</template><script>
export default {props: ['message']
};
</script>

Vue 3 示例代码

父组件 (ParentComponent.vue):

<template><div><h1>父组件</h1><ChildComponent :message="parentMessage" /></div>
</template><script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';const parentMessage = ref('来自父组件的信息');
</script>

子组件 (ChildComponent.vue):

<template><div><h2>子组件</h2><p>{{ message }}</p></div>
</template><script setup>
import { defineProps } from 'vue';const props = defineProps({message: String
});
</script>
1.2 子组件向父组件发送消息(Events)

Vue 2 示例代码

父组件 (ParentComponent.vue):

<template><div><h1>父组件</h1><ChildComponent @childEvent="handleChildEvent" /></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent},methods: {handleChildEvent(payload) {alert(`收到子组件的事件,数据为: ${payload}`);}}
};
</script>

子组件 (ChildComponent.vue):

<template><div><h2>子组件</h2><button @click="sendEvent">点击发送事件</button></div>
</template><script>
export default {methods: {sendEvent() {this.$emit('childEvent', '子组件的数据');}}
};
</script>

Vue 3 示例代码

父组件 (ParentComponent.vue):

<template><div><h1>父组件</h1><ChildComponent @childEvent="handleChildEvent" /></div>
</template><script setup>
import ChildComponent from './ChildComponent.vue';function handleChildEvent(payload) {alert(`收到子组件的事件,数据为: ${payload}`);
}
</script>

子组件 (ChildComponent.vue):

<template><div><h2>子组件</h2><button @click="sendEvent">点击发送事件</button></div>
</template><script setup>
import { defineEmits } from 'vue';const emit = defineEmits(['childEvent']);function sendEvent() {emit('childEvent', '子组件的数据');
}
</script>

2. 组件注册与命名

什么是组件注册?
组件注册是将组件定义为可在模板中使用的自定义元素的过程。Vue 提供了全局注册和局部注册两种方式。

2.1 全局注册

Vue 2 示例代码

// main.js
import Vue from 'vue';
import App from './App.vue';
import MyComponent from './components/MyComponent.vue';Vue.component('MyComponent', MyComponent);new Vue({render: h => h(App)
}).$mount('#app');

Vue 3 示例代码

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import MyComponent from './components/MyComponent.vue';const app = createApp(App);
app.component('MyComponent', MyComponent);
app.mount('#app');
2.2 局部注册

Vue 2 示例代码

<template><div><MyComponent /></div>
</template><script>
import MyComponent from './MyComponent.vue';export default {components: {MyComponent}
};
</script>

Vue 3 示例代码

<template><div><MyComponent /></div>
</template><script setup>
import MyComponent from './MyComponent.vue';
</script>
2.3 组件命名规范

在 Vue.js 中,组件命名有一定的规范要求。为了避免与 HTML 元素发生冲突,通常推荐使用 PascalCasekebab-case 命名组件。

PascalCase 示例

Vue.component('MyComponent', {// 组件选项
});

kebab-case 示例

Vue.component('my-component', {// 组件选项
});

Vue 3 中,推荐使用 PascalCase 来命名组件,但在模板中可以使用 kebab-case 进行引用。


总结

本文详细介绍了在 Vue.js 中创建和使用组件的核心知识点,包括父子组件之间的通信方式(propsevents)以及组件的注册与命名方式。通过 Vue 2 和 Vue 3 的对比示例,希望你能更好地理解并掌握这些概念,从而在实际项目中更加高效地使用 Vue.js 进行开发。

看到这里的小伙伴,欢迎 点赞👍评论📝收藏🌟

希望这篇关于 Vue.js 组件化开发的文章对你有所帮助。如果有其他需要调整或补充的地方,请告诉我!


http://www.ppmy.cn/news/1522749.html

相关文章

【前端】CSS控制style样式失效

在CSS中&#xff0c;可以通过几种方式控制或禁用特定的style样式。 使用all: unset来重置所有可继承的属性&#xff0c;并清除所有的样式&#xff1a; .element {all: unset;} 使用inherit值来使属性获取其父元素的值&#xff1a; .element {color: inherit;font-size: inh…

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物&#xff0c;今天我们实现一下人物实现移动和跳起&#xff0c;依次点击&#xff0c;我们准备创建一个C#文件 创建好我们点击进去&#xff0c;就会跳转到我们的Vision Studio&#xff0c;然后输入这些代码 using UnityEngine;public class M…

Vue 使用接口返回的背景图片和拼图图片进行滑动拼图验证

一、背景 前两天发了一篇 vue-monoplasty-slide-verify 滑动验证码插件使用及踩坑_vue-monoplasty-slide-verify 引用后不显示-CSDN博客 这两天项目又需要通过接口校验&#xff0c;接口返回了背景图片和拼图图片&#xff0c;于是在网上找了一篇帖子&#xff0c;vue 图片滑动…

Apache Ignite 在处理大规模数据时有哪些优势和局限性?

Apache Ignite 在处理大规模数据时的优势和局限性可以从以下几个方面进行分析&#xff1a; 优势 高性能&#xff1a;Ignite 利用内存计算的优势&#xff0c;实现了极高的读写性能&#xff0c;通过分布式架构&#xff0c;它可以将数据分散到多个节点上&#xff0c;从而实现了并…

JavaEE-HTTPHTTPS

目录 HTTP协议 一、概念 二、http协议格式 http请求报文 http响应报文 URL格式 三、认识方法 四、认识报头 HTTP响应中的信息 HTTPS协议 对称加密 非对称加密 中间人攻击 解决中间人攻击 HTTP协议 一、概念 HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤…

2024华为OD机试真题-反射计数Python-C卷D卷-200分

2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 题目解析 代码 题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则…

分布式部署①

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 1. 需要部署的服务 Nacos 理论上,应…

仕考网:事业编面试全流程介绍

1.进入考场 工作人员会检查考生的身份证、准考证以及随身携带物品&#xff0c;可以带食物和水 2.进入候考室 进入候考室&#xff0c;工作人员会再次确认考生信息 3.抽签 考生到齐后&#xff0c;工作人员会组织考生抽签&#xff0c;登记抽签序号、信息确认、发放号码牌 4.…