第二阶段:Vue 组件化开发(第 19天)

Vue 组件间通信:子组件向父组件传值($emit)

在 Vue.js 中,组件间通信是构建应用的关键部分。子组件向父组件传值通常通过 $emit 方法实现,这是一种高效的事件驱动方式。下面我将逐步解释核心知识点、提供案例代码,并总结要点,帮助你掌握这一技术。

核心知识点
  1. $emit 的作用

    子组件通过 $emit 触发一个自定义事件,将数据传递给父组件。这允许子组件主动通知父组件某些状态变化或用户输入。

  2. 自定义事件的触发

    在子组件中,使用 this.$emit('eventName', data) 来触发事件。其中:

    • eventName 是自定义事件名(例如 'update-content'),需在父组件中监听。
    • data 是传递的数据(可以是字符串、对象等)。
  3. 自定义事件的监听

    父组件在使用子组件时,通过 v-on 指令(或简写 @)监听事件。例如:<ChildComponent @eventName="handleEvent" />

  4. 事件处理

    父组件定义事件处理函数(如 handleEvent),该函数接收子组件传递的数据,并更新父组件的状态(如 data 属性)。

案例代码

以下是一个完整示例,实现子组件向父组件传递用户输入的内容,父组件展示该内容。代码使用 Vue 3 的选项式 API。

子组件(ChildComponent.vue)

vue 复制代码
<template>
  <div>
    <input type="text" v-model="inputValue" placeholder="输入内容">
    <button @click="sendToParent">提交</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      inputValue: ''
    }
  },
  methods: {
    sendToParent() {
      // 触发自定义事件 'update-content',并传递 inputValue
      this.$emit('update-content', this.inputValue);
      this.inputValue = ''; // 清空输入框
    }
  }
}
</script>

父组件(ParentComponent.vue)

vue 复制代码
<template>
  <div>
    <h2>父组件接收的内容:{{ receivedContent }}</h2>
    <ChildComponent @update-content="handleContentUpdate" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      receivedContent: ''
    }
  },
  methods: {
    handleContentUpdate(data) {
      // 接收子组件传递的数据,更新状态
      this.receivedContent = data;
    }
  }
}
</script>

说明

  • 子组件定义了一个输入框和按钮。用户输入内容后,点击按钮触发 sendToParent 方法,通过 $emit 发送事件和数据。
  • 父组件监听 @update-content 事件,调用 handleContentUpdate 方法接收数据,并更新 receivedContent 状态。
  • 运行应用时,用户在子组件输入内容并提交,父组件会实时显示该内容。
总结要点
  1. 掌握传值流程

    • 子组件使用 this.$emit('eventName', data) 触发事件。
    • 父组件通过 v-on 监听事件,并定义处理函数接收数据。
    • 这种模式实现了从子到父的单向数据流,确保组件间解耦。
  2. 理解原理

    • $emit 基于 Vue 的事件系统,允许子组件"发射"事件,父组件"监听"并响应。
    • 这种方式实现了父子组件间的双向交互,适用于用户输入、状态更新等场景。
    • 在实际开发中,确保事件名唯一且语义清晰,避免冲突。

通过这个案例,你可以练习在项目中应用 $emit,例如表单提交、用户反馈等。Vue 的官方文档提供了更多高级用法,建议结合实践加深理解。

相关推荐
八角丶1 小时前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
倔强的石头1061 小时前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
图扑软件2 小时前
中篇・运笔|统一 DataModel 底座,HT UI 组件万物同源
javascript·低代码·ui·性能优化·数据可视化
a1117762 小时前
3D 脑图谱 / Bilingual 3D Brain Atlas 项目
前端
T1mzhou2 小时前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端
小小尚@3 小时前
WebGIS/ECharts 地图开发|MapLand 在线行政区划边界一键下载 GeoJSON 工具
前端·javascript·echarts
葡萄城技术团队3 小时前
工业数据可视化:使用活字格 AIcoding + Three.js 构建轻量化三维设备监控大屏
开发语言·javascript·信息可视化
默_笙4 小时前
🚍 一条 Todo 的奇幻漂流:TypeScript 全栈类型安全的"护照检查"
前端·javascript
计算机魔术师4 小时前
NVIDIA 以 129.3 亿美元收购 Hugging Face
前端
平头哥技术团队4 小时前
Day 01 | 用 HTML 写第一个网页:双击就能在浏览器打开
前端