简体   繁体   English

Vue.js – 如何使用事件克隆元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM