Vue动态组件事件绑定

时间:2016-11-29 06:37:58

标签: vue.js vue-component

我有一个动态组件,使用记录的动态组件语法在运行时解析和绑定;

<div class="field">
    <component v-if="component" :is="component" @valueUpdated="onUpdate($event)"></component>
</div>

决定使用分配给安装的道具。

无论出于何种原因,当动态呈现的子组件发出事件this.$emit('eventName', /*someData*/)时,父组件似乎无法听到它。标准组件中使用的方法是否适用于动态呈现的方法?道具似乎有用,所以也许我没有做正确的事情?

1 个答案:

答案 0 :(得分:4)

是的,你可以使用带有动态组件的道具,只需要为html属性使用小写连字符(kebab-case)名称,即

<component v-if="component" :is="component" @value-updated="onUpdate"></component>

Vue.component('foo', {
    template: `
		<div>
        	<button @click="$emit('value-updated', { bar: 'baz' })">pass data</button
        </div>
    `
});

new Vue({
    el: '#app',
    data: {
    	currentComponent: 'foo',
        output: {},
    },
    methods: {
    	onUpdate (payload) {
        	this.output = payload
        }
    }
})
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="app">
    <component v-if="currentComponent" :is="currentComponent" @value-updated="onUpdate"></component>
    <pre>{{ output }}</pre>
</div>