Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove deprecated $listeners in vue 3

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"
               :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);*/}
            });
        },

2nd case: Component 2

<template>
  <custom-button 
      v-bind="buttonProps"
      v-on="$listeners"
      :class="buttonClass"
      @click="tooggle">
  </custom-button>
</template>

How to handle these two cases?

like image 435
learningMonk Avatar asked Jan 25 '26 15:01

learningMonk


1 Answers

In Vue 3 $listeners moved to $attrs you can use v-bind="$attrs". Here is an article from docs

Additional documentation: https://vuejs.org/guide/components/attrs.html#nested-component-inheritance

like image 166
Ruslan Hryshyn Avatar answered Jan 27 '26 05:01

Ruslan Hryshyn



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!