以编程方式为 VueJS 中的动态组件绑定自定义事件 [英] Programmatically bind custom events for dynamic components in VueJS
问题描述
在我的 vuejs 应用程序中,我通过以下方式使用动态组件:
<component ref="compRef" :is="myComponent" v-bind="myComponentProps"></component><div class="my-buttons"><my-button label="Reset" @click="reset()"/>
</mycomponent >
myComponent
是父组件上的一个 prop,它包含要注入的实际组件.myComponentProps
也是持有注入实例的 porps 的 prop.
我想知道如何将侦听器动态绑定到组件 - 我知道 我无法将一个对象发送到带有多个事件的 v-on.
我正在考虑以编程方式添加它,但是还没有找到任何关于如何为 Vue 自定义事件完成它的信息(类似于 addEventListener
自定义事件的类型)
任何提示将不胜感激!
使用 Vue 2.2+,您可以使用 $on(eventName, callback)
:
new Vue({el: '#app',创建(){常量事件 = [{名称:'我的事件1',回调:()=>console.log('event1')},{名称:'我的事件2',回调:()=>console.log('event2')},{名称:'我的事件3',回调:()=>console.log('event3')}]for (let e of EVENTS) {this.$on(e.name, e.callback);//添加事件监听器}//也可以将多个事件绑定到一个回调this.$on(['click', 'keyup'], e => { console.log('event', e) })}})
<script src="https://unpkg.com/vue@2.6.8/dist/vue.min.js"></脚本><div id="应用程序"><div><!-- v-on:EVENTNAME 添加事件监听器 --><button v-on:click="$emit('my-event1')">引发 event1</button><button v-on:click="$emit('my-event2')">引发 event2</button><button v-on:click="$emit('my-event3')">引发 event3</button>
<div><!-- v-on 简写:@EVENTNAME --><button @click="$emit('my-event1')">引发 event1</button><button @click="$emit('my-event2')">引发 event2</button><button @click="$emit('my-event3')">引发 event3</button>