【发布时间】:2019-06-08 23:25:10
【问题描述】:
更新:这是我在这里尝试实现的简化版本(来自下面的线程对话):
接受组件 A - 接受组件 B - 接受一个条件 - 如果 条件为真:用组件 A 包装组件 B [并渲染]- 仅其他 渲染组件 B。
我对创建一个有条件地呈现包装器的组件感兴趣。我认为像这样的理论方法可能是最好的**:**
<template>
<div>
<slot v-if="wrapIf" name="wrapper">
<slot name="content"></slot>
</slot>
<slot v-else name="content"></slot>
</div>
</template>
<script>
export default {
props: {
wrapIf: Boolean,
}
}
</script>
那么当我们实现时,它会看起来是这样的:
...
<wrapper-if :wrap-if="!!link">
<a :href="link" slot="wrapper"><slot></slot></a>
<template slot="content">
content
</template>
</wrapper-if>
想法是,在这种情况下,如果存在 链接, 那么让我们用包装槽(可以是任何组件)包装内容/element)。 如果没有,那么让我们只渲染内容,而不使用包装的链接。非常简单的逻辑,但我似乎误解了一些基本的 vue 功能,因为 这个特定的例子不起作用。
我的代码有什么问题或是否有某种本机 api 已经实现了这个或也许是一种依赖这已经是这样了吗?
输出应如下所示:
wrapIf === true
<a href="some.link">
content
</a>
wrapIf === false
content
【问题讨论】: