【发布时间】:2018-09-28 09:22:25
【问题描述】:
我正在为 Vuetify 中的 v-stepper 开发一个包装组件。在这种情况下,我希望用户在使用组件时定义一个插槽,然后我将使用该插槽名称来构建步骤。
我需要为桌面视图和移动视图提供此插槽。我尝试使用 v-if 来隐藏是否移动,但这会导致其他问题,所以我选择了 v-show,但这在开发者控制台中出现了错误:
在同一渲染树中发现重复的插槽“page6” - 这可能会导致渲染错误。
这是组件的结构请注意,它们在同一个.vue file
桌面sn-p
<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>
手机sn-p
<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>
这是用户在使用组件时设置插槽的方式,可以看到here
<div slot="page5">
<h4>Step 3</h4>
</div>
所以这里的关键是用户在使用组件的时候设置了一个slot,但是组件把那个slot放在了.vue文件的2个地方,一个在桌面部分,一个在移动部分。但是,它需要具有相同的名称,因为它实际上是同一个插槽...
这是我的 github 项目的代码,您可以将其拉下并运行 npm install,然后运行 npm run dev 以查看它的实际效果:Vuetify-Simple-Wizard
【问题讨论】:
标签: vue.js vuejs2 vue-component vuetify.js