vue.js - 传递给插槽的 vue 组件上的单击事件

标签 vue.js vuejs2 vue-component vue-cli

我的自定义 slider 插件中有这两个组件,组件 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>既不工作也不触发,没有附加事件之类的东西。

有什么想法吗?

最佳答案

在组件上使用@click 只会监听该组件使用$emit 显式发出的click 事件。它不会监听 DOM 事件。

要监听 native 事件,您需要改用 @click.native

参见:

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

关于vue.js - 传递给插槽的 vue 组件上的单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57504158/

相关文章:

javascript - axios在vue中嵌套json

javascript - Laravel 5/VueJS : Route for Get request route return Object or Array depending Eloquent query

javascript - 在 <i18n> 标签中延迟加载翻译文件

vue.js - 在新窗口中打开一个 VueJS 组件

javascript - 如何设置在 vue.js 2 中选择的选项?

javascript - 有没有一种简单的方法可以从 vuejs 获取所有数据?

javascript - 动态添加文件夹中的所有组件

reactjs - 在 Vue.js 中使用 React-table.js 时出错

javascript - Vue.js - 如何使用三元运算符在 vue 中返回带有很棒字体图标的 html

vue.js - 如何在 vue.js 组件的 props 数组中混合不同的数据类型?