[英]Vue.js – how to clone element with events?
I have a Vue.js plugin where user can transmit they elements as slot.我有一个 Vue.js 插件,用户可以在其中将元素作为插槽传输。 I have to clone some of them (in specific situations).
我必须克隆其中一些(在特定情况下)。 Of course, users can add events to these elements.
当然,用户可以向这些元素添加事件。 For example:
例如:
<component>
<div class="slot-item" @click="myMethod(1)"></div>
<div class="slot-item" @click="myMethod(2)"></div>
<div class="slot-item" @click="myMethod(3)"></div>
</component>
How to clone this slot elements with all Vue/JS events?如何使用所有 Vue/JS 事件克隆此插槽元素? And finally have rendered HTML, for example:
最后渲染了 HTML,例如:
<div class="my-component">
<!-- It's the last item cloned -->
<div class="slot-item cloned-slot-item" @click="myMethod(3)"></div>
<!-- These are the original user elements -->
<div class="slot-item" @click="myMethod(1)"></div>
<div class="slot-item" @click="myMethod(2)"></div>
<div class="slot-item" @click="myMethod(3)"></div>
<!-- It's the first item cloned -->
<div class="slot-item cloned-slot-item" @click="myMethod(1)"></div>
</div>
What you can use is using a separate slots for the first and last parts of the context.您可以使用的是为上下文的第一部分和最后部分使用单独的插槽。
This can be used as follows:这可以按如下方式使用:
Vue.component('example-component', { template: '#example-component', }); new Vue({ el: '#demo', template: '#example-app', methods: { log(m, classTest) { console.log(m, classTest); }, }, });
<script src="https://unpkg.com/vue@latest/dist/vue.js"></script> <script type="text/x-template" id="example-component"> <div> <slot name="last" className="clone"></slot> <slot name="first"></slot> <slot></slot> <slot name="last"></slot> <slot name="first" className="clone"></slot> </div> </script> <script type="text/x-template" id="example-app"> <example-component> <template slot="first" slot-scope="props"> <div @click="log('first: ', props.className)" :class="props.className"> first </div> </template> <div @click="log('middle1')"> middle1 </div> <div @click="log('middle2')"> middle2 </div> <template slot="last" slot-scope="props"> <div @click="log('last: ', props.className)" :class="props.className"> last </div> </template> </example-component> </script> <div id="demo"> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.