如何在vue3组合式函数中使用emit
关于Vue3的组合式函数,简单来说就是,如果我们在多个组件中,都用到一些共同的功能时就可以将其封装为一个组合式函数。类似于Vue2中的minix。但是在Vue3的组合式函数中,如果我们要使用emit获取父组件传递的事件时,以往写在script setup中的defineEmits就不能用了,控制台会提示:defineEmits() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.
那么此时,我们就不能再继续使用defineEmits了。
一、通过getCurrentInstance方法实现
Vue3中,也为我们准备了响应的组件:getCurrentInstance,通过getCurrentInstance我们可以获取当前正在调用该组合式函数的组件实例,然后通过ctx.emit来访问父组件身上的方法。
即,之前的:
emits('event');
要改成:
import {getCurrentInstance} from "vue";
const instance = getCurrentInstance();
instance.emit('event')
通过这样的方式,我们就可以拿到调用该组合式函数的组件,并通过ctx.emit的方式访问到其父组件身上的方法。
二、通过向组合式函数传参实现
当然,还有一种方式,就是直接将 emits做为参数,传递给组合式函数去使用。即在调用组合式函数的组件中,先使用defineEmits声明好emits,再将emits做为参数传递给组合式函数。
const emits = defineEmits(['event'])
const {...} = useForm(emits)
三、通过向方法传参实现
在调用方法时,通过向方法传参实现
@click="event(emits,data)"
大家根据自己的实际代码情况,选择使用。
- CSS选择器:nth-child()的灵活用法及常见场景示例
CSS选择器中的nth-child()相信大家都比较熟悉,nth-child()和nth-of-type()的区别是:nth-child()不区分类型。大家经常
- 为什么你的logo图模糊不清,移动端图片虚化的解决方案
在传统pc时代的时候,几乎99%的网站都在使用图片格式作为logo,而大部分网站都使用了png透明底的图片来做网站的logo。但是进入移动时代之后,这种习惯还是
- 响应式网站布局的优缺点分析
响应式网站,通俗的讲就是使用CSS媒体查询技术,写一套代码,可以在多个终端上使用。在此之前,前端切图工作者是需要分别针对电脑端、移动端和平板等常见设备专门去写一
- 切图和前端什么关系?为什么前端又被称为切图仔?
很多初从事前端切图这个行业的新人,大多都有一个疑问?为什么要把前端开发人员称为切图仔呢?提起这个问题,我们还要从前端切图行业的发展历程来说起,当然,这个问题对与
- 目前主流的前端框架有哪些?
基本上每种语言都有对应的一些快速框架用于提升开发人员的效率,所谓框架更像是工具箱或者脚手架,在开发时如果能很好的利用框架可以起到事半功倍的效果。简单形象的说,如
- 移动端background-attachment: fixed失效解决方法
在做web前端切图时,我们经常需要做背景图片不跟随内容滚动的效果,这个时候就需要使用到background-attachment: fixed 属性,这个属性及