-
-
Couldn't load subscription status.
- Fork 33.8k
Description
This special syntax is somewhat inspired by the v-bind:class.
Let's take this component as an example:
<template>
<test />
</template>
<script>
export default {
methods: {
handleEvents (type, ...args) {
console.log('event=' + type, ...args)
},
handleAction (...args) {
console.log('action!', ...args)
},
}
}
</script>These call the handleEvents method when any event is emitted, with the following signature: function (eventType, ...args).
<test v-on="handleEvents" />
<test v-on="'handleEvents'" />
<test v-on="[handleEvents]" />
<test v-on="['handleEvents']" />These call both handleEvents and handleEvents2 methods.
<test v-on="[handleEvents, handleEvents2]" />
<test v-on="['handleEvents', 'handleEvents2']" />These call the handleAction method when the action event is emitted, with the usual signature: function (...args).
<test v-on="{ action: handleAction }" />
<test v-on="{ action: 'handleAction' }" />You can mix everything!
<test v-on="[handleEvents, { action: handleAction }]" />Or store it all in a reactive property!
<template>
<test v-on="handlers" />
</template>
<script>
export default {
data: {
handlers: ['handleEvents', {action: 'handleAction'}],
},
methods: {
handleEvents (type, ...args) { ... },
handleAction (...args) { ... },
}
}
</script>With the $props, it could allow making specialized components out of generic ones much easier:
<template>
<ui-modal v-bind="$props" v-on="$emit">
<input :value="value" :placeholder="placeholder" />
</ui-modal>
</template>
<script>
import Modal from 'components/Modal.vue'
export default {
name: 'ui-input-modal',
props: {
...Modal.props,
value: {},
placeholder: String,
},
}
</script>In this example, we expose the same interface as the Modal component (props and events), while making it more specialized with news props/events and a pre-made template.
If you want, take a look at this working proof of concept.