Home > database >  how to remove deprecated $listeners in vue 3
how to remove deprecated $listeners in vue 3

Time:01-25

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

  •  Tags:  
  • Related