Я работаю над упакованным компонентом для v-stepper в Vuetify.В этом случае я хочу, чтобы пользователь определял слот при использовании компонента, а затем я буду использовать это имя слота для построения шагов.
Мне нужно, чтобы этот слот существовал как для рабочего стола, так и длямобильный вид.Я пытался использовать v-if, чтобы скрыть, если мобильный или нет, но это вызвало другие проблемы, поэтому я пошел с v-show, но это дает мне ошибку в консоли разработчика:
Дублированное присутствие слота«page6» находится в том же дереве рендеринга - это, вероятно, приведет к ошибкам рендеринга.
Вот как структурирован компонент Обратите внимание, что они находятся в одном и том же .Vue file
Фрагмент рабочего стола
<v-stepper-items>
<v-stepper-content v-for="(item,index) in steps" :key="index" :step="index+1">
<slot :name="item.slot"></slot>
</v-stepper-content>
</v-stepper-items>
Мобильный фрагмент
<v-stepper-content :key="`${index}-stepContent-mobile`" :step="index+1">
<slot :name="item.slot"></slot>
</v-stepper-content>
Я попытался создать область слота, но, похоже, это не такпримените здесь
<v-stepper-items>
<v-stepper-content v-for="(item,index) in steps" :key="index" :step="index+1">
<template :slot-scope="item.slot"><slot :name="item.slot"></slot></template>
</v-stepper-content>
</v-stepper-items>
Так пользователь будет настраивать слот при использовании компонента , который можно увидеть здесь
<div slot="page5">
<h4>Step 3</h4>
</div>
Таким образом, ключевым моментом здесь является то, что пользователь устанавливает один слот при использовании компонента, но компонент помещает этот слот в 2 места в файле .vue, один в разделе рабочего стола и один в разделе мобильных устройств.Однако оно должно иметь то же имя, поскольку фактически это тот же слот ...
Вот мой проект github с кодом, вы можете снять его и запустить npm install
, а затем npm run dev
, чтобыувидеть его в действии: Vuetify-Simple-Wizard