vue之父子组件间通信实例讲解(props、$ref、$emit)

yizhihongxing

Vue之父子组件间通信实例讲解

在Vue中,父组件和子组件之间是可以互相通信的。在实际的开发中,组件间通信是非常常见的需求。本文将介绍Vue中常见的父子组件间通信方式,并结合实例进行详细讲解。

Props

Props是Vue中父子组件通信的最基本方式。通过在父组件中使用v-bind或简写形式的:来将数据传递给子组件作为props。子组件可以通过props接收这些值。这样父组件和子组件之间就可以进行简单的数据传递。

示例1

下面是一个简单的示例,展示了如何使用Props进行父子组件间通信:

<template>
  <div>
    <child-component :message="parentMessage"></child-component>
  </div>
</template>

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

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  data () {
    return {
      parentMessage: 'Hello from Parent Component'
    }
  }
}
</script>
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

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

在这个示例中,父组件中将parentMessage的值通过messageprops传递给子组件,子组件中通过props接收这个值并显示在页面上。

$ref

$ref是Vue中另一种父子组件通信的方式。通过在父组件中使用ref来给子组件赋一个引用的id。然后可以通过$refs访问子组件并调用其方法或访问其数据。

示例2

下面是一个示例,展示了如何使用$ref进行父子组件之间的通信:

<template>
  <div>
    <child-component ref="child"></child-component>
    <button @click="onClick">子组件方法调用</button>
  </div>
</template>

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

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  methods: {
    onClick () {
      this.$refs.child.sayHello()
    }
  }
}
</script>
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  name: 'ChildComponent',
  data () {
    return {
      message: 'Hello from Child Component'
    }
  },
  methods: {
    sayHello () {
      alert(this.message)
    }
  }
}
</script>

在这个示例中,父组件使用ref给子组件赋一个id为child的引用。然后在父组件中可以使用$refs.child来访问子组件,并调用其sayHello方法。

$emit

$emit是Vue中父子组件通信的另一种方式。通过在子组件中使用$emit来触发一个事件,并传递一个参数给父组件。在父组件中通过在子组件上使用v-on@来监听这个事件,然后通过事件回调函数获取子组件传递的参数。

示例3

下面是一个示例,展示了如何使用$emit进行父子组件之间的通信:

<template>
  <div>
    <child-component @send-message="onReceiveMessage"></child-component>
    <p>{{ message }}</p>
  </div>
</template>

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

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  data () {
    return {
      message: ''
    }
  },
  methods: {
    onReceiveMessage (message) {
      this.message = message
    }
  }
}
</script>
<template>
  <div>
    <button @click="sendMessage">发送消息</button>
  </div>
</template>

<script>
export default {
  name: 'ChildComponent',
  data () {
    return {
      message: 'Hello from Child Component'
    }
  },
  methods: {
    sendMessage () {
      this.$emit('send-message', this.message)
    }
  }
}
</script>

在这个示例中,子组件中使用$emit触发一个名为send-message的事件,并将this.message作为参数传递,父组件中使用v-on@来监听这个事件,然后在onReceiveMessage方法中获取并处理这个参数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue之父子组件间通信实例讲解(props、$ref、$emit) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue-resource 获取本地json数据404问题的解决

    Vue-resource 是Vue.js官方提供的一个数据请求插件,可以方便地进行数据的请求和响应。在使用vue-resource时,经常会遇到获取本地json数据时出现404错误的问题,接下来我将详细讲解如何解决该问题。 问题描述 使用vue-resource请求本地json数据时,页面在访问数据时会报404错误,无法正常获取数据。 解决方案 步骤一:使用…

    Vue 2023年5月27日
    00
  • Vue.js状态管理之Pinia与Vuex详解

    Vue.js状态管理之Pinia与Vuex详解 状态管理是什么 在一些大型 Web 应用中,数据的流转较为复杂,需要对数据的读写进行控制和管理,以保证应用的数据一致性和可靠性,而状态管理就是一种用于控制和管理应用数据的方法。 在 Vue.js 中,状态管理可以使用两种比较流行的库实现:Vuex 和 Pinia。 Vuex 简介 Vuex 是一个专门为 Vue…

    Vue 2023年5月27日
    00
  • vue3 源码解读之 time slicing的使用方法

    Vue3 源码解读之 time slicing 的使用方法 简介 time-slicing 是一种将任务拆分为多个小任务,分散到渲染帧之间执行的技术。Vue3 在异步更新和大型列表渲染问题上 应用了 time-slicing 技术,以加快页面渲染速度。本篇文章将探讨 time-slicing 的使用方法,通过实例帮助我们理解这个 新特性。 使用方法 尽管 V…

    Vue 2023年5月29日
    00
  • JavaScript+CSS实现的可折叠二级菜单实例

    下面是“JavaScript+CSS实现的可折叠二级菜单实例”的完整攻略。 1. 实现思路 该二级菜单实例的实现思路如下: 初始状态二级菜单处于收缩状态,点击主菜单可以展开或关闭对应的二级菜单。 主菜单和二级菜单分别定义为一组HTML结构,通过CSS样式实现布局和样式。 通过JavaScript事件绑定实现主菜单点击后对应的二级菜单的展开和收缩。 2. HT…

    Vue 2023年5月28日
    00
  • vue计算属性和监听器实例解析

    Vue计算属性和监听器实例解析 在Vue中,计算属性和监听器是常用的属性,它们起到了非常关键的作用。通过它们,我们可以对数据进行处理和监听,从而提高应用的开发效率和性能。在本文中,我将分享关于Vue计算属性和监听器的解析,包括定义、使用方法和示例说明。 什么是计算属性 计算属性是Vue中常用的一个属性,用于对数据进行更加复杂的处理。其本质上是一个函数,可以根…

    Vue 2023年5月28日
    00
  • vue.js实现开关(switch)组件实例代码

    我很乐意为您提供“Vue.js实现开关(switch)组件实例代码”的攻略。具体步骤如下: 1. 组件的结构设计 在实现开关组件的过程中,需要考虑它的结构设计。对于一个简单的开关组件而言,我们可以考虑采用以下的HTML结构: <div class="switch"> <input id="toggle&quot…

    Vue 2023年5月28日
    00
  • Ant Design Vue日期组件的时间限制方式

    Ant Design Vue 是 Ant Design 在 Vue 中的实现,是一套基于 Vue 实现的高质量 UI 组件库,拥有丰富的组件和良好的设计风格,深受前端工程师的喜爱。 Ant Design Vue 提供了日期组件,我们可以通过设置时间限制方式来限定用户选择日期的范围,例如限制用户只能选择今天及今天之后的日期,或者只能选择本月份的日期等等。 下面…

    Vue 2023年5月29日
    00
  • 解决vue-cli中stylus无法使用的问题方法

    下面是完整的“解决vue-cli中stylus无法使用的问题方法”的攻略。 问题描述 在使用vue-cli创建Vue项目的过程中,通过命令行工具安装完stylus插件后,却无法使用stylus的语法。 原因分析 vue-cli默认并未安装stylus插件,因此如果要在Vue项目中使用stylus,需要先通过npm或者yarn等包管理工具手动安装stylus插…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部