In migration from vue 2 to vue 3, i am getting some compilation warnings. Deprecation of $listeners in components is one of those warnings. I have checked official documentation to use $attrs by removing $listeners. I am new in vue 3. So, not able to understand how to handle those warnings related to listeners.
Here is the snippet: 1st case: Component 1
<template>
<div>
<input ref="input"
:value="txtField"
@input="txtField=$event.target.value"
:type="inputType"
:
: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);*/}
});
},
2nd case: Component 2
<template>
<custom-button v-bind="buttonProps"
v-on="$listeners"
:
@click="tooggle"></custom-button>
</template>
How to handle these two cases?
CodePudding user response:
**Put listener into attributes.**
<template>
<div>
<input ref="input"
:value="txtField"
@input="txtField=$event.target.value"
:type="inputType"
:
:placeholder="placeholder"
:disabled="disabled"
:readonly="readonly"
:onfocus="disabled&&'this.blur();'"
:tabindex="tabindex"
v-bind="listenersInput" // here is the $attrs used
@keyup.enter="enterHandler"
@blur="validateOnEvent"/>
</div>
</template>
<script>
export default {
inheritAttrs: false,
computed:{
listenersInput() {
//var vm = this;
return Object.assign({}, this.$listeners, {
input: function(event){
/*vm.$emit('input',event.target.value);*/}
});
},}
}
</script>
CodePudding user response:
In Vue 3 $listeners moved to $attrs you can use v-bind="$attrs". Here is an article from docs
