当前位置:首页 > 技术分析 > 正文内容

Vue3 如何实现父子组件传值?

ruisui885个月前 (01-07)技术分析36

在Vue 3中,要实现父子组件传值效果主要通过props和emit两种机制来实现,下面我们就来详细介绍一下这两种机制。

父组件向子组件传值props

props是Vue组件的一种机制,主要的作用就是实现从父组件向子组件传递数据值,在父组件上通过在子组件标签上定义属性来实现数据属性值的传递,在子组件中通过props选项来接收这些数据。如下所示。

首先先来定义一个子组件,并且在子组件中定义好通过props接收的父组件的传值,如下所示。

// 子组件 (ChildComponent.vue)
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  }
}
</script>

在父组件的模板中,我们可以通过在子组件标签上使用属性绑定来传递数据。

<ChildComponent :message="parentMessage" />

这里我们定义的parentMessage属性就是在父组件中定义的数据属性。然后再子组件中可以通过props接收父组件传递的数据,如下所示。

export default {
  props: {
    message: {
      type: String,
      required: true
    }
  }
}

通过这种方式,message就成了子组件的一个属性值,就可以在子组件中直接使用这个数据属性值来进行数据的获取操作。

子组件向父组件传值emit

Vue中提供的事件机制允许了子组件可以通过触发触发事件 (emit) 将数据传递到父组件的操作。我们可以在父组件中监听这些事件变化并且处理传递的数据。如下所示。

首先我们先来定义一个需要给父组件传值的子组件,内容如下所示。

// 子组件 (ChildComponent.vue)
<template>
  <div>
    <button @click="sendMessage">Send Message to Parent</button>
  </div>
</template>

<script>
export default {
  emits: ['send-message'],
  methods: {
    sendMessage() {
      this.$emit('send-message', 'Hello from Child');
    }
  }
}
</script>

在子组件中,通过 this.$emit 触发一个事件并传递数据。

this.$emit('send-message', 'Hello from Child');

这里,send-message 是事件的名称,'Hello from Child' 是传递的数据。

接下来,我们就可以在在父组件的模板中,通过 v-on 指令或简写 @ 来监听子组件触发的事件,如下所示。

<ChildComponent @send-message="receiveMessage" />

这里,receiveMessage是父组件中的一个方法,通过这个方法可以接收到通过子组件传递过来的数据值,在后续的操作中来使用这些值。

export default {
  methods: {
    receiveMessage(message) {
      console.log(message); // Output: Hello from Child
    }
  }
}

完整的示例代码

父组件代码内容,如下所示。

<template>
  <div>
    <h1>Parent Component</h1>
    <ChildComponent :message="parentMessage" @send-message="receiveMessage" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: 'Hello from Parent'
    }
  },
  methods: {
    receiveMessage(message) {
      console.log(message); // Output: Hello from Child
    }
  }
}
</script>

子组件代码内容

<template>
  <div>
    <h2>Child Component</h2>
    <p>{{ message }}</p>
    <button @click="sendMessage">Send Message to Parent</button>
  </div>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      required: true
    }
  },
  emits: ['send-message'],
  methods: {
    sendMessage() {
      this.$emit('send-message', 'Hello from Child');
    }
  }
}
</script>

通过这种方式,我们就可以实现Vue3的父子组件之间的传值操作,确保数据在组件树中流动,从而实现复杂的交互逻辑。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/71.html

分享给朋友:

“Vue3 如何实现父子组件传值?” 的相关文章

Ubuntu Linux 24.04 LTS发行版现已开放下载

IT之家 4 月 25 日消息,Ubuntu 24.04 长期支持版(LTS)“Noble Numbat” 现已发布,有需要的用户请通过官网下载发行版 ISO 镜像进行安装。Ubuntu 24.04 采用了 Linux 6.8 内核,可利用 Netplan 在桌面上配置网络连接,还配备了现代化的桌面...

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。转载链接:https://www.jia...

【Vue3 基础】05.组件化

这是 Vue3 + Vite + Pinia +TS + Element-Plus 实战系列文档。最近比较忙没什么时间写文章,争取早日把这个系列完结吧~生命周期和模板引用在本章之前,我们通过响应式 api 和声明式渲染,处理了 DOM 的更新,但光是这些,对于一些复杂的需要手动操作 DOM 的情况,...

vue 3 学习笔记 (八)——provide 和 inject 用法及原理

在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传很多次,会很麻烦。像这种情况,可以使用 provide 和 inject 解决这种问题,不论组件嵌套...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...

html5+css3做的响应式企业网站前端源码

大家好,今天给大家介绍一款,html5+css3做的响应式企业网站前端源码 (图1)。送给大家哦,获取方式在本文末尾。首页banner幻灯片切换特效(图2)首页布局简约合理(图3)关于我们页面(图4)商品列表(图5)商品详情(图6)服务介绍(图7)新闻列表(图8)联系我们(图9)源码完整,需要的朋友...