Vue3 $emit用法指南(含选项API、组合API及 setup 语法糖)

Vue3 $emit用法指南

在Vue3中,使用$emit进行组件间通信仍然是常见的方式。在本文中,我们将深入介绍$emit的用法及相关知识点。

基础用法

$emit的基本用法是在组件内部触发事件并传递参数。以下是一个简单的示例:

<template>
  <div>
    <button @click="increase">增加</button>
    <button @click="decrease">减少</button>
    <p>{{ count }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  methods: {
    increase() {
      this.count++
      this.$emit('change', this.count)
    },
    decrease() {
      this.count--
      this.$emit('change', this.count)
    }
  }
}
</script>

在这个示例中,increasedecrease方法分别在内部修改count的值,并分别通过$emit触发了名为change的自定义事件,并将count作为参数传递给父组件。

传递多个参数

除了上面示例中的单个参数,我们也可以通过数组和对象来传递多个参数。

<template>
  <div>
    <button @click="submit">提交</button>
  </div>
</template>

<script>
export default {
  methods: {
    submit() {
      const formData = {
        name: 'John Doe',
        age: 25,
        email: 'johndoe@example.com'
      }
      this.$emit('submit-form', [formData, 'extra parameter'])
      // 也可以使用对象来传递多个参数
      // this.$emit('submit-form', { formData, extraParam: 'extra parameter' })
    }
  }
}
</script>

监听事件

在父组件中,我们可以通过v-on@语法来监听子组件的事件。

<template>
  <div>
    <child-component @change="handleChange" />
    <p>Count: {{ count }}</p>
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      count: 0
    }
  },
  methods: {
    handleChange(count) {
      this.count = count
    }
  }
}
</script>

在这个示例中,我们引入了一个名为ChildComponent的子组件,并通过@change监听子组件触发的change事件,并根据传递的参数来更新父组件的count属性。

选项API中的$emit用法

在Vue3中,我们也可以使用选项API中的$emit方法来进行事件的触发。以下是一个示例:

<template>
  <div>
    <button @click="increase">增加</button>
    <button @click="decrease">减少</button>
    <p>{{ count }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  methods: {
    increase() {
      this.count++
      this.$emit('change', this.count)
    },
    decrease() {
      this.count--
      this.$emit('change', this.count)
    }
  },
  mounted() {
    this.$options.parent.emit('child-mounter', '子组件已挂载')
  }
}
</script>

在这个示例中,我们通过$options.parent来访问父组件,并触发名为child-mounter的事件。

组合API中的$emit用法

在组合API中,我们可以通过getCurrentInstance方法来获取当前实例,并使用$emit方法进行事件的触发。以下是一个示例:

<template>
  <div>
    <button @click="increase">增加</button>
    <button @click="decrease">减少</button>
    <p>{{ count }}</p>
  </div>
</template>

<script>
import { getCurrentInstance } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const { emit } = getCurrentInstance()

    const increase = () => {
      count.value++
      emit('change', count.value)
    }

    const decrease = () => {
      count.value--
      emit('change', count.value)
    }

    onMounted(() => {
      emit('child-mounter', '子组件已挂载')
    })

    return {
      count,
      increase,
      decrease
    }
  }
}
</script>

在这个示例中,我们使用了getCurrentInstance方法来获取当前实例,并使用$emit方法来触发名为child-mounter的事件。

setup语法糖中的$emit用法

在Vue3的setup语法糖中,我们可以直接通过context参数来获取emit方法,并触发自定义事件。以下是一个示例:

<template>
  <div>
    <button @click="increase">增加</button>
    <button @click="decrease">减少</button>
    <p>{{ count }}</p>
  </div>
</template>

<script>
export default {
  setup(props, { emit }) {
    const count = ref(0)

    const increase = () => {
      count.value++
      emit('change', count.value)
    }

    const decrease = () => {
      count.value--
      emit('change', count.value)
    }

    onMounted(() => {
      emit('child-mounter', '子组件已挂载')
    })

    return {
      count,
      increase,
      decrease
    }
  }
}
</script>

在这个示例中,我们直接通过{ emit }来获取emit方法,并使用它来触发名为child-mounter的事件。

结束语

在本文中,我们深入介绍了Vue3中$emit的用法及相关知识点,并且通过多个示例进行了演示。希望本文能够帮助您更好地使用Vue3进行组件间通信。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3 $emit用法指南(含选项API、组合API及 setup 语法糖) - Python技术站

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

相关文章

  • Vue中使用 Echarts5.0 遇到的一些问题(vue-cli 下开发)

    当在Vue项目中使用Echarts5.0时,可能会遇到以下问题: 1. 需要手动引入echarts.min.js 如需在vue组件中使用echarts5.0,应先手动引入echarts.min.js。可以通过NPM或从cdn获取: npm install echarts –save 然后在Vue组件中引入echarts.min.js: import ech…

    Vue 2023年5月29日
    00
  • vue中$set用法详解

    下面我将为你详细介绍“vue中$set用法详解”。 什么是$set $set是Vue.js提供的一个全局API,用于向响应式对象中添加一个属性,并确保这个新属性也是响应式的。这个全局API的使用方式如下: Vue.set(target, key, value) 其中,target表示目标对象,key表示需要添加的属性名,value则表示需要添加的属性的值。 …

    Vue 2023年5月29日
    00
  • vue中的vendor.js文件过大问题及解决

    问题描述: 在使用 Vue 应用构建时,有时会遇到 vendor.js 文件过大的问题,导致应用加载速度缓慢,用户体验受到影响,那么如何解决这个问题呢? 问题分析: Vue 应用在打包的时候,会抽取第三方库和模块到一个名为 vendor.js 的文件中,这个文件包含了所有在项目中被使用的第三方库和模块,如果这些库和模块很多,那么 vendor.js 文件会变…

    Vue 2023年5月28日
    00
  • Springboot vue导出功能实现代码

    那我为您详细讲解一下“Springboot vue导出功能实现代码”的完整攻略。 1. 环境准备 首先需要准备好以下环境: JDK 8+ Maven 3+ Vue.js 2+ Element-UI 2+ axios 0.19+ 2. 前端实现 在前端页面中,我们需要添加一个导出按钮,当用户点击该按钮时,触发导出操作。 <el-button type=&…

    Vue 2023年5月27日
    00
  • Vue使用formData格式类型上传文件的示例

    下面是“Vue使用formData格式类型上传文件的示例”的完整攻略。 1. 什么是formData格式类型上传文件 在前端上传文件时,一般需要将文件的二进制数据转换为一种可被后端接收的格式,最常用的格式有form-data和base64编码。其中最常用的方法是使用form-data格式。formData格式是一种键值对的格式,每一个键对应一个值,值可以是字…

    Vue 2023年5月28日
    00
  • vue实现动态数据绑定

    Vue.js 是一个 MVVM 框架,其中最核心的特性就是数据绑定,这是 Vue.js 区别与其他 JavaScript 框架的最重要的特点之一,本文将介绍 Vue.js 实现动态数据绑定的完整攻略。 1. 基本概念介绍 Vue.js 中有三个最核心的概念:数据、模板和渲染器。其中,数据就是我们的数据模型,用来存储应用程序中的数据;模板则用于描述数据如何被展…

    Vue 2023年5月28日
    00
  • vue中的过滤器及其时间格式化问题

    下面是关于 Vue 中过滤器的完整攻略,包括时间格式化问题。 什么是过滤器? Vue 中的过滤器是一种函数,用于改变数据的输出形式。可以在模板中使用管道符 | 的形式调用,对数据进行过滤和格式化,例如: {{ data | filter }} 其中 data 是需要过滤的数据,filter 是过滤器的名称,在 Vue 实例中定义。 过滤器有局限性,不能用于修…

    Vue 2023年5月27日
    00
  • Echarts在Taro微信小程序开发中的踩坑记录

    关于“Echarts在Taro微信小程序开发中的踩坑记录”的完整攻略,我会从以下几个方面为您进行详细讲解: 环境搭建 引入Echarts库 Echarts在Taro组件中的使用 Echarts的样式调整 踩坑记录及解决方案 1. 环境搭建 首先,我们需要确保已安装Taro环境。可以使用以下命令进行检查: $ taro info 若未安装,则需要先安装Taro…

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