Vue.js Playground

Auto-latest Vue with minimal boilerplate

by Vikash Kumar Gupta

HTML

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<div id="app"></div>

JavaScript

// This code is an example demonstrating the situation described in this Gist:
// https://gist.github.com/Loilo/73c55ed04917ecf5d682ec70a2a1b8e2

const A = {
  template: `<div><slot name="a">Default A Content</slot><slot>Default C</slot></div>`
}

const B = {
  template: `<div><slot name="b">Default B Content</slot></div>`
}

const C = {
  template: `<div><slot name="c">Default C Content</slot></div>`
}

const D = {
  template: `<div><slot name="d" emoji="🎉">Default D Content</slot></div>`
}

Vue.component('W', {
  props: ['child'],
  template: `<div :is="child">
  <slot v-for="(_, name) in $slots" :name="name" :slot="name" />
  <template v-for="(_, name) in $scopedSlots" :slot="name" slot-scope="slotData"><slot :name="name" v-bind="slotData" /></template>
</div>`
})

new Vue({
	el: '#app',
  template: `<W :child="C"><span slot="d" slot-scope="{ emoji }">Special D Content with scoped data: {{ emoji }}</span></W>`,
  data: {
  	A, B, C, D
  }
})