我使用 v-for
渲染 Vue 组件:
<component
v-for="component in components"
:is="component.type"
@click="myFunction(component.id)">
</component>
点击渲染的组件不会触发myFunction
方法。然而,点击手动插入的组件会触发:
<div @click="myFunction('...')"></div>
如何纠正这个问题?
我使用 v-for
渲染 Vue 组件:
<component
v-for="component in components"
:is="component.type"
@click="myFunction(component.id)">
</component>
点击渲染的组件不会触发myFunction
方法。然而,点击手动插入的组件会触发:
<div @click="myFunction('...')"></div>
添加 .native 修饰符以监听原生事件而非组件事件。
<component
v-for="component in components"
:is="component.type"
@click.native="myFunction(component.id)">
</component>
<component
v-for="component in components"
:is="component.type"
:on-click="myFunction.bind(this, component.id)">
</component>
// Component
<template>
<button @click="onClick">Click me</button>
</template>
<script>
export default {
props: ['onClick']
}
</script>
请尝试以下操作:
<template v-for="component in components">
<component :is="component.type" @click="myFunction(component.id)" />
</template >
<div class="wrapper" v-for="component in components" @click="myFunction(component.id)">
<component :is="component.type"/>
</div>
应该可以了。
@click
绑定需要在div
上,但除此之外这个代码是有效的。为什么呢?因为这会在 DOM 中创建不必要的元素。 - Mikko