从插槽中的内容向父级发出事件 [英] Emit event from content in slot to parent
问题描述
我正在尝试构建一个灵活的轮播控件,允许内部内容元素强制更改幻灯片,以及轮播控件本身来更改幻灯片
我页面中的示例结构如下
<div class="slide"><button @click="$emit('next')">下一步</button>
<div class="slide"><button @click="$emit('close')">关闭</button>
</my-carousel>
我的轮播模板就像
<div class="slides" ref="slides"><插槽></插槽><页脚><!-- 其他轮播控件,如箭头、指示器等放在此处--></页脚>
和脚本一样
<代码>...创建(){this.$on('next', this.next)}...
访问幻灯片等没有问题,但是使用 $emit
不起作用,我似乎无法找到解决此问题的简单方法.
我希望组件易于重用而无需使用
- 中央事件总线
- 轮播中的硬编码幻灯片
- 在页面级别实现下一个幻灯片方法并将当前索引传递给控件(因为我每次使用轮播时都必须这样做)
槽是针对父组件作用域编译的,因此从槽发出的事件只会被模板所属的组件接收.
如果你想要轮播和幻灯片之间的交互,你可以使用 作用域插槽代替它允许您从轮播到插槽公开数据和方法.
假设你的轮播组件有 next
和 close
方法:
轮播模板:
<div class="slides";ref=幻灯片"><插槽:下一个=下一个":close="close"></slot><页脚><!-- 其他轮播控件,如箭头、指示器等放在此处--></页脚>