我有一个动态组件,它在运行时使用文档化的动态组件语法进行解析和绑定;

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

决定在安装时使用指定的props .

无论出于何种原因,当动态渲染的子组件发出事件this.$emit('eventName', /*someData*/)时,父组件似乎无法听到它.标准组件中使用的方法是否适用于动态渲染的组件?props 似乎很管用,所以也许我做得不对?

推荐答案

是的,你可以在动态组件中使用props ,只是你需要在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>

Vue.js相关问答推荐

在VueJS中卸载元素之前是否应该删除JavaScript事件收件箱?

如何使用 vueJS 上的 ref( ) 函数创建二维数组定义?

为什么在 Vue2 中调用 this.$emit() 后 props 没有立即更新?

视图中的 vue 样式不适用于 html

拖入 vue2-google-map 后如何获取标记位置?

Webpack - MiniCssExtractPlugin 不提取文件

VueJS - 将单独的组件加载到 vue 实例中

vuejs:将props传递给javascript中的组件?

使用 Vue 和 JS 下载 CSV 文件

v-on:submit.prevent 不停止表单提交

如何从 .vue 文件中导出多个对象

是否可以在 vue-devtools 中命名 Vue 实例?

在 v-for 循环中使用 v-model

Nuxt 应用程序在刷新动态路由时返回 404(Tomcat 服务器)

Vue 动态组件事件绑定

如何从 keep-alive 中销毁缓存的 Vue 组件?

Vue 2.0 设置路由 - 不要使用new来产生副作用

在 Vue.js 模板中调用函数

如何在 vuejs 中的基于类的组件中编写计算设置器

vuejs 中缺少 webpack 配置