Emit event from content in slot to parent(从插槽中的内容向父级发送事件)
问题描述
I'm trying to build a flexible carousel control that allows inner content elements to force changing a slide, aswell as the carousel controls itself to change slides
A sample structure in my page looks like
<my-carousel>
<div class="slide">
<button @click="$emit('next')">Next</button>
</div>
<div class="slide">
<button @click="$emit('close')">Close</button>
</div>
</my-carousel>
The template for my carousel is like
<div class="carousel">
<div class="slides" ref="slides">
<slot></slot>
</div>
<footer>
<!-- other carousel controls like arrows, indicators etc go here -->
</footer>
</div>
And script like
...
created() {
this.$on('next', this.next)
}
...
Accessing the slides etc is no problem, however using $emit
will not work and I can't seem to find a simple solution for this problem.
I want to component to be easily reusable without having to use
- central event bus
- hardcoded slides within a carousel
- implement the next slide methods on page level and pass the current index to the control (as I'd have to do this every time I use the carousel)
Slots are compiled against the parent component scope, therefore events you emit from the slot will only be received by the component the template belongs to.
If you want interaction between the carousel and slides, you can use a scoped slot instead which allows you to expose data and methods from the carousel to the slot.
Assuming your carousel component has next
and close
methods:
Carousel template:
<div class="carousel">
<div class="slides" ref="slides">
<slot :next="next" :close="close"></slot>
</div>
<footer>
<!-- Other carousel controls like arrows, indicators etc go here -->
</footer>
</div>
Carousel example usage:
<my-carousel v-slot="scope">
<div class="slide">
<button @click="scope.next">Next</button>
</div>
<div class="slide">
<button @click="scope.close">Close</button>
</div>
</my-carousel>
这篇关于从插槽中的内容向父级发送事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从插槽中的内容向父级发送事件


基础教程推荐
- 如何添加到目前为止的天数? 2022-01-01
- Bokeh Div文本对齐 2022-01-01
- 即使用户允许,Gmail 也会隐藏外部电子邮件图片 2022-01-01
- 在 contenteditable 中精确拖放 2022-01-01
- npm start 错误与 create-react-app 2022-01-01
- Bootstrap 模态出现在背景下 2022-01-01
- 检查 HTML5 拖放文件类型 2022-01-01
- Fabric JS绘制具有活动形状的多边形 2022-01-01
- fetch 是否支持原生多文件上传? 2022-01-01
- 原生拖动事件后如何获取 mouseup 事件? 2022-01-01