在从vue 2迁移到vue 3的过程中,我收到了一些编译警告。组件中$listeners的弃用就是这些警告之一。我已经检查了官方文档,通过删除$listeners来使用$attrs。我是Vue 3的新手。因此,无法理解如何处理与侦听器相关的警告。
下面是代码片段:**第1种情况:**组件1
<template>
<div>
<input ref="input"
:value="txtField"
@input="txtField=$event.target.value"
:type="inputType"
:class="inputClass"
:placeholder="placeholder"
:disabled="disabled"
:readonly="readonly"
:onfocus="disabled&&'this.blur();'"
:tabindex="tabindex"
v-on="listenersInput" // here is the method where $listeners used
@keyup.enter="enterHandler"
@blur="validateOnEvent"/>
</div>
</template>
//method
listenersInput() {
//var vm = this;
return Object.assign({}, this.$listeners, {
input: function(event){ /*vm.$emit('input',event.target.value);*/}
});
},
**第二种情况:**组件2
<template>
<custom-button v-bind="buttonProps"
v-on="$listeners"
:class="buttonClass"
@click="tooggle"></custom-button>
</template>
如何处理这两种情况?
3条答案
按热度按时间bihw5rsg1#
在Vue 3中,
$listeners
移动到$attrs
,您可以使用v-bind="$attrs"
。这里有一篇来自docs的文章其他文件:https://vuejs.org/guide/components/attrs.html#nested-component-inheritance
dl5txlt92#
在Vue 2中,可以使用
v-on="$listeners"
绑定所有事件监听器。在Vue 3中,根据文档,如果你想将fallthrough属性应用于非根元素,你必须使用
v-bind="$attrs"
,它还包括事件侦听器。Vue 2代码:
在Vue 3中看起来像这样:
xa9qqrwz3#
这个问题已经以不同的形式被问过几次了,但我还没有看到任何干净的代码示例。下面的例子展示了如何使用v3 $attrs将事件冒泡到父母和祖父母等,就像我们在v2中使用$listeners一样: