2016-12-12 4 views
4

оказывает компоненты Vue с помощью v-for:динамического события компонента нажмите на Vue

<component 
    v-for="component in components" 
    :is="component.type" 
    @click="myFunction(component.id)"> 
</component> 

При нажатии на оказанном компоненте не срабатывает метод myFunction. Однако щелчок по вставленному вручную компоненту делает:

<div @click="myFunction('...')"></div> 

Как исправить это?

ответ

0

Попробуйте следующее:

<template v-for="component in components"> 
    <component :is="component.type" @click="myFunction(component.id)" /> 
</template > 
+1

Параметр '@ связывания потребности быть на DIV, но в остальном это работает click'. Почему это? Это создает ненужные элементы в DOM. – Mikko

+0

@Mikko Я изменил ответ, который не должен добавлять ненужные элементы в DOM. – Saurabh

+0

Невозможно также привязать событие click к тегу шаблона. – Mikko

0

Вы можете передать обработчик щелчка в качестве опоры к компоненту ребенка, например:

<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> 
0

Я предполагаю, что вы пытаетесь сделать, не нужны или не нужны. Если вы хотите вызвать функцию, определенную в родительском элементе при каждом щелчке дочернего компонента, вы можете просто обернуть компонент в элемент и связать событие с этой оболочкой. Таким образом, функция будет срабатывать при нажатии какой компонент отображается внутри него, и вы будете иметь не события связаны непосредственно с компонентами

<div class="wrapper" v-for="component in components" @click="myFunction(component.id)"> 
    <component :is="component.type"/> 
</div> 

Это должно сделать это.

3

Добавить .native модификатор, чтобы прослушивать собственное событие вместо события компонента.

<component 
    v-for="component in components" 
    :is="component.type" 
    @click.native="myFunction(component.id)"> 
</component> 

Источник: https://vuejs.org/v2/api/#v-on

+0

Это работает сэр! – Iamzozo

Смежные вопросы