首页 > 解决方案 > 传递给插槽的 vue 组件上的单击事件

问题描述

我的自定义滑块插件中有这两个组件,组件 1将是包装器,组件 2将传递到组件 1插槽:

comp1.vue

<template>
    <div id="sliderwrapper">
        <slot></slot>
    </div>
</template>

comp2.vue

<template>
    <div class="slider">
        <slot></slot>
    </div>
</template>

现在,在我的 Vue 应用程序中,我这样做了

<sliderwrapper>
    <sliderbox @click="slideritem(item.title)" v-for="(item,index) in slideritems" :key="index">
        <p>{{ item.title }}</p>
    </sliderbox>
</sliderwrapper>

import sliderwrapper from './comp1.vue';
import sliderbox from './comp2.vue';

export default{
    components : [ sliderwrapper, sliderbox ],
    data() {
        return {
            slideritems : [
                { title : 'title 1' },
                { title : 'title 2' },
                { title : 'title 3' },
            ]
        }
    },
    methods : {
        slideritem(title){
            alert(title);
        }
    }
}

不幸的是,组件 2 上的点击事件<sliderbox>既不工作也不触发,诸如事件之类的东西没有附加。

有任何想法吗?

标签: vue.jsvuejs2vue-componentvue-cli

解决方案


在组件上使用@click只会监听click该组件使用$emit. 它不会监听 DOM 事件。

要侦听您需要使用的本机事件@click.native

看:

https://vuejs.org/v2/guide/components-custom-events.html#Binding-Native-Events-to-Components


推荐阅读