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

yizhihongxing

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.nextTick()

    一文学会什么是vue.nextTick() 什么是vue.nextTick() vue.nextTick()是Vue.js的一个方法,它的作用是在修改数据之后等待DOM更新完毕后执行回调函数。在有些情况下,当我们修改了某个数据后需要对DOM进行操作(比如获取某个元素的高度),此时DOM可能还没有更新完毕,这就需要加入一个异步任务,等待DOM更新完毕后再执行相…

    Vue 2023年5月29日
    00
  • webstorm激活码注册码最新2021(亲测,有效期至2089)附详细安装教程

    WebStorm激活码注册码最新2021攻略 简介 WebStorm是一款由JetBrains公司推出的基于IntelliJ平台的JavaScript IDE,它支持流行的Web开发工具,并且在代码开发效率、代码智能提示、代码调试等方面具有强大的功能。但是该软件需要购买才能正式使用,本文将介绍WebStorm激活码注册码最新2021攻略,以便大家可以更方便快…

    Vue 2023年5月28日
    00
  • 详解vue-cil和webpack中本地静态图片的路径问题解决方案

    下面是 “详解vue-cil和webpack中本地静态图片的路径问题解决方案”的完整攻略: 问题描述 在使用Vue-cli和Webpack时,我们在组件或模板中引用本地或者网络图片时,会发现图片无法正常显示出来。 原因是因为Webpack在打包时,会将所有静态资源文件进行压缩打包,我们在代码中引用图片路径,实际上Webpack已经修改了路径或者将其包含在了m…

    Vue 2023年5月28日
    00
  • 详解vue-cli项目中的proxyTable跨域问题小结

    我来详细讲解一下“详解vue-cli项目中的proxyTable跨域问题小结”的完整攻略。 何为proxyTable? 在Vue CLI项目中,如果需要服务端连接API接口进行数据交互,而此时请求的URL与服务端的域名不一致,就会产生跨域问题。解决此类跨域问题,我们通常会在前端环境下进行反向代理。而Vue CLI中则是采用proxyTable来进行跨域请求。…

    Vue 2023年5月28日
    00
  • VUE中使用Vue-resource完成交互

    使用Vue-resource完成交互可以实现前端页面和后端服务器之间的数据交换和通信。下面是使用Vue-resource实现交互的完整攻略: 1. 安装Vue-resource 在使用Vue-resource前,首先要将其安装到Vue项目中,可以通过在命令行中执行以下命令进行安装: npm install vue-resource –save 2. 引入V…

    Vue 2023年5月28日
    00
  • vue编译器util工具使用方法示例

    对于vue编译器util工具的使用方法,我们可以分为两部分:安装和使用。 安装vue编译器util工具 vue编译器util工具是一个npm包,因此可以使用npm进行安装。在命令行中输入下面命令进行安装: npm install @vue/compiler-util –save 使用vue编译器util工具 在vue模板编译过程中使用vue编译器util工…

    Vue 2023年5月27日
    00
  • 学习Vue框架中必掌握的重点知识

    学习Vue框架中必掌握的重点知识 组件基础 Vue的组件是Vue应用的基本模块。组件是可复用的,Vue应用将一个页面划分为多个组件并组成组件树。组件是拥有自己的状态和生命周期的可复用模块。了解组件的定义、注册、渲染以及组件之间的通信是掌握Vue的关键。 组件的定义和注册 组件的定义是通过Vue.extend()和Vue.component()方法来实现的。V…

    Vue 2023年5月28日
    00
  • 一起来看看Vue的核心原理剖析

    一起来看看Vue的核心原理剖析 简介 《一起来看看Vue的核心原理剖析》是一篇介绍Vue.js框架核心原理的文章。本文将从源码分析的角度,详细讲解Vue.js框架的核心原理。 原理剖析 Vue.js框架主要有三个重要的概念:数据驱动、组件化和响应式。下面将对这三个概念进行详细的讲解。 数据驱动 在Vue.js框架中,它使用了数据绑定的方式来实现数据驱动。而数…

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