Vue.js 如何将插槽中的组件定义为子组件中定义的道具

Vue.js 如何将插槽中的组件定义为子组件中定义的道具,vue.js,Vue.js,假设我有三个部分:阿尔法,布拉沃和查理 看起来是这样的: Alpha.vue <template> <div class="alpha"> <bravo> <template slot="card"> <charlie></charlie> </template> </bravo>

假设我有三个部分:阿尔法,布拉沃和查理

看起来是这样的:

Alpha.vue

<template>
    <div class="alpha">
        <bravo>
            <template slot="card">
                <charlie></charlie>
            </template>
        </bravo>
    </div>
</template>
<template>
    <div class="bravo">
        <slot name="card" v-for="result in results" :result="result"></slot>
    </div>
</template>
<script>
export default {
    data: function() {
        return {
            results: [1, 2, 3]
        }
    }
}
</script>
<template>
    <h1>{{ result }}</h1>
</template>
<script>
export default {
    props: [
        'result'
    ]
}
</script>
<template>
<bravo>
<template slot="card" slot-scope="{ result }">
<charlie :result="result"></charlie>
</template>
</bravo>
</template>

Bravo.vue

<template>
    <div class="alpha">
        <bravo>
            <template slot="card">
                <charlie></charlie>
            </template>
        </bravo>
    </div>
</template>
<template>
    <div class="bravo">
        <slot name="card" v-for="result in results" :result="result"></slot>
    </div>
</template>
<script>
export default {
    data: function() {
        return {
            results: [1, 2, 3]
        }
    }
}
</script>
<template>
    <h1>{{ result }}</h1>
</template>
<script>
export default {
    props: [
        'result'
    ]
}
</script>
<template>
<bravo>
<template slot="card" slot-scope="{ result }">
<charlie :result="result"></charlie>
</template>
</bravo>
</template>

导出默认值{
数据:函数(){
返回{
结果:[1,2,3]
}
}
}
Charlie.vue

<template>
    <div class="alpha">
        <bravo>
            <template slot="card">
                <charlie></charlie>
            </template>
        </bravo>
    </div>
</template>
<template>
    <div class="bravo">
        <slot name="card" v-for="result in results" :result="result"></slot>
    </div>
</template>
<script>
export default {
    data: function() {
        return {
            results: [1, 2, 3]
        }
    }
}
</script>
<template>
    <h1>{{ result }}</h1>
</template>
<script>
export default {
    props: [
        'result'
    ]
}
</script>
<template>
<bravo>
<template slot="card" slot-scope="{ result }">
<charlie :result="result"></charlie>
</template>
</bravo>
</template>

{{result}}
导出默认值{
道具:[
“结果”
]
}
在Alpha的插槽中定义结果道具时,如何将结果道具传递给Charlie

这背后的想法是Bravo包含很多共享逻辑。Alpha有不同的变体,可能包含插槽的不同卡(但始终会有结果属性)


在运行该程序时,result prop没有被解析为Charlie组件,并且出现了一个未定义的错误(该示例可能有一些错误,但我希望它能说明我试图实现的目标)。

我认为这是针对您的情况的解决方案

Alpha.vue

<template>
    <div class="alpha">
        <bravo>
            <template slot="card">
                <charlie></charlie>
            </template>
        </bravo>
    </div>
</template>
<template>
    <div class="bravo">
        <slot name="card" v-for="result in results" :result="result"></slot>
    </div>
</template>
<script>
export default {
    data: function() {
        return {
            results: [1, 2, 3]
        }
    }
}
</script>
<template>
    <h1>{{ result }}</h1>
</template>
<script>
export default {
    props: [
        'result'
    ]
}
</script>
<template>
<bravo>
<template slot="card" slot-scope="{ result }">
<charlie :result="result"></charlie>
</template>
</bravo>
</template>

你应该用Bravo.vue来包装你的插槽


Bravo
在这里不是有效的组件。@Bert在什么意义上?您可能没有一个槽作为根元素,也可能没有多个根元素。不过,最终,您需要在Bravo中定义一个作用域槽。谢谢@Bert,我已经更新了问题,以反映您强调的错误。Charlie组件需要在Alpha组件中定义,而不是Bravo@David更新回答完成了,看起来我没有在Alpha组件中包含结果道具,谢谢!