前端组件化开发

假设这个页面是vue开发的,如果一整个页面都是编写在一个vue文件里面,后期不好维护,会特别的庞大,那么如何这个时候需要进行组件化开发。组件化开发后必然会带来一个问题需要进行组件之间的通信。组要是父子组件之间通信,非父子之间可以通过vuex或者pinia进行通信。

引用子组件的信息

javascript 复制代码
import ChildComponent from './HelloWorld.vue';
<ChildComponent :message="parentMessage" />

父组件向子组件传递消息

vue 复制代码
<template>
  <ChildComponent :message="parentMessage" />
</template>
 
<script setup>
import { ref } from 'vue';
import ChildComponent from './HelloWorld.vue';
 
const parentMessage = ref('Hello from Parent!');
</script>

子组件接收消息

javascript 复制代码
<template>
  <div>{{ message }}</div>
</template>
 
<script setup>
import { defineProps } from 'vue';
 //通过 defineProps 来接收父组件的消息
const props = defineProps({
  message: String
});
</script>

子组件向父组件发送消息

vue 复制代码
<template>
  <button @click="sendMessageToParent">Send Message to Parent</button>
</template>
 
<script setup>
import { defineEmits } from 'vue';
 
const emit = defineEmits(['message-to-parent']);
 
const sendMessageToParent = () => {
  emit('message-to-parent', 'Hello from Child!');
};
</script>

这段代码是使用 Vue 3 的 `Composition API` 编写的组件,主要展示了如何通过 `emit` 在子组件中向父组件发送消息。我们来逐步分析这段代码。

### 1. `<template>` 部分

```vue
<template>
  <button @click="sendMessageToParent">Send Message to Parent</button>
</template>

这部分定义了组件的模板,包含了一个按钮。当用户点击这个按钮时,会触发 @click 事件,调用 sendMessageToParent 方法。这里的 @click 是 Vue 的事件绑定语法,它将按钮的点击事件与 sendMessageToParent 方法关联。

2. <script setup> 部分

<script setup> 是 Vue 3 中引入的简化写法,用于更简洁地定义组件的逻辑。所有在 setup 中定义的变量和函数可以直接在模板中使用。

vue 复制代码
<script setup>
import { defineEmits } from 'vue';

这里引入了 defineEmits 函数,用于定义组件内的事件发送机制。

3. 定义 emit

vue 复制代码
const emit = defineEmits(['message-to-parent']);
  • defineEmits 函数用来定义当前组件可以发出的自定义事件。这里定义了一个名为 message-to-parent 的事件,表示子组件可以通过这个事件向父组件发送消息。
  • emit 是一个方法,通过它我们可以触发事件,并可以携带参数发送给父组件。

4. 定义 sendMessageToParent 方法

vue 复制代码
const sendMessageToParent = () => {
  emit('message-to-parent', 'Hello from Child!');
};
  • 这个方法在用户点击按钮时触发,内部调用 emit 方法,触发 message-to-parent 事件。
  • 'message-to-parent' 是事件名称,'Hello from Child!' 是发送的消息内容。

因此,当按钮被点击时,子组件会向父组件发送一个事件,携带的消息内容是 'Hello from Child!'

总结

  • 这段代码展示了 Vue 3 通过 emit 向父组件发送消息的机制。
  • defineEmits 用来声明子组件可以触发的自定义事件。
  • sendMessageToParent 方法用于在点击按钮时,触发自定义事件并将消息发送给父组件。

父组件接收到 message-to-parent 事件后,可以通过绑定事件来处理这个消息,例如显示、记录或做其他逻辑处理。

复制代码
```vue
<template>
  <ChildComponent @message-to-parent="receiveMessageFromChild" />
  {{ messageFromChild }}
</template>
 
<script setup>
import { ref } from 'vue';
import ChildComponent from './HelloWorld.vue';
 
const messageFromChild = ref('');
 
const receiveMessageFromChild = (message) => {
  messageFromChild.value = message;
};
</script>
相关推荐
程序员黑豆3 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC4 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea4 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望4 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少5 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0075 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis6 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝7 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师7 小时前
新兴多智能体系统的模式与问题
前端
用户059540174468 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css