在 Vue3 移除 $listeners ,全部改到 $attrs 裡,因此在 Vue2 裡可能會有這種情況:
<template>
  <label>
    <input
        type="text"
        v-bind="$attrs"
        v-on="$listeners">
  </label>
</template>
<script>
  export default {
    inheritAttrs: false
  }
</script>
在 Vue3 ,因為 $listeners 不存在,所有的綁定只要使用 $attrs :
<template>
  <label>
    <input
        type="text"
        v-bind="$attrs">
  </label>
</template>
<script>
export default {
  inheritAttrs: false
}
</script>
假設只需要傳遞特定的事件,而非所有的事件,舉例要傳遞的事件是 update-name ,Vue 2 的寫法利用 $listeners 會是:
<template>
   <my-element
       :name="$attrs.name"
       @update-name="$listeners['update-name']" />
</template>
在 Vue3 裡需要加上 on 作為前綴,上層元件就能夠收到事件 update-name。
<template>
   <my-element
       :name="$attrs.name"
       @update-name="$attrs['onUpdateName']" />
</template>
參考資料:https://v3.vuejs.org/guide/migration/listeners-removed.html
沒有留言:
張貼留言