I have ComponentA which has slots content and actions and it looks like this
<template>
<div>
<slot name="content">
// initial state content
</slot>
<slot name="actions">
// initial state actions
</slot>
</div>
</template>
In my MainComponent.vue, I am using ComponentA like this
<template>
<div>
<component-A>
<template #content>
// components go here
</template>
<template #actions>
// actions go here
</template>
</component-A>
</div>
</template>
How can I put ComponentX into ComponentA instead of establishing templates inside of ComponentA in my MainComponent and what should ComponentX look like?
What i tried so far is this in my MainComponent.vue, I am using ComponentA like this
<template>
<div>
<component-A>
<component-X>
</component-A>
</div>
</template>
And my ComponentX looks like this
<template>
<div>
<slot name="content">
<div class="d-flex flex-column">
<v-select
label="test"
:items="[]"
</div>
</slot>
<slot name="actions">
<v-row>
<v-spacer />
<v-btn
text="OK"
@click="doSomething"
/>
</v-row>
</slot>
</div>
</template>
My Expectation is that any component put into ComponentA with matching slots should be picked up by it and rendered accordingly.
Unfortunately components and slots do not work they way you are thinking. What you could do that may be a similar is add a
<slot>without a name in Component A around your named slots.Component A
This will allow you to completely override both the content and actions slots in Component A with Component X. Since you don't specify a slot name for Component X to use it will take the place of default slot in Component A.
MainComponent.vue