#15635·Vue.js

[Vapor] fallthrough v-on listeners erase the root's own listener when the root is `<component :is>` or the listener is bound via `v-bind`.

Author: arkida39Created Sep 24, 2026Updated Sep 24, 2026

Vue version

3.6.0-rc.9

Link to minimal reproduction

https://play.vuejs.org/#eNq9Vd1u2jAUfhXLNwGphE1Mk8YCKlRcbBdQdVNvlmkKwVC3iR3ZDkNCvPuObRJi5kTtTa+Iz893vvPLEc+KItyXBI9xJFNBC4UkUWUxjRnNCy4UuuN5MUNbwXMUhEPz0g7BV8di7ljMKwvHZpFT5SIZiQdNy11EI/GiLrnIk8zFPcsq+2hoU4Ok4KFIXmSJIvBCKHr6OE3BgzPCFBpTGQ1BYjQ28ds0o+nLJMYpZ5JnJMz4rhfMikSAQ9CP8dBarwU6f9ly+P3mrl/FYD9YU7ZxQ9tq+WGM7gKFbgXnymukFa0sbZnbQzTYtoeYN0NcUmKmBaintYhKxOAnSvmGXJfbyPpu7lVP/dTOWreU0bDRV3yDlQSfLd2Fz5IzmO6jBtdAeUEzIlaFooAZ4zEyGq1Lsoz//W5kSpTkppKnTyR98cif5UHLYnwviCRiT2Jc61QidkRZ9eLHkhzgu1bmfFNmYN2hfCCQb6k5WrN5yTZAu2Fn2H4ze0DZ7qdcHBRhskpKE9WWJ2MfY9gEXdi21C90R+En4xezE1SxXvfr+4D2CUS2C3XZrqvdcjoNXQzWpVKcBXqc/GtVzdL0cXa/etDDcUZwO3xmZg7Cf5era9vfzKie7ulytRx0szJz55y11qrpGAoRsEMTtCFbyoh2kr1fgQn4u999tSxtZO8GcD4izu40/zHq9dFkaqB7FqsPzawLah291axPrOe/4P35Nsrdwblx6Ftq/QpWnVfmeiJ9ZEzj/+yJ0OsHPEbh5/DDQKThFy1X8rHWgDwc4dM/io2EKw==

Steps to reproduce

For component :is case:

  • When clicking on non-vapor component, console prints:
    Broot
    Bparent
  • When clicking on vapor component, console prints:
    Aparent

For v-bind case:

  • When clicking on non-vapor component, console prints:
    EmitBroot
    EmitBparent
  • When clicking on vapor component, console prints:
    EmitAparent

What is expected?

As in Non-Vapor case, both listeners are ran one after another, as described in: https://vuejs.org/guide/components/attrs.html#v-on-listener-inheritance

What is actually happening?

In Vapor case, the original listener is completely overwritten.

System Info

bash

Any additional comments?

Interestingly enough, it works correctly (both listeners are called in the correct order), when the root component and listener binding is "static", i.e. button with @click. See the code for CompNormalA.vue in the reproducer.