【发布时间】:2019-11-27 09:16:42
【问题描述】:
我有一个巨大的烦人组件,需要在父模板中重复多次,因为父模板使用的是 v-if。下面是组件代码:
<SelectCard
v-for="(channel, index) in category.visibleChannels"
:key="index + '-' + channel.id"
:channel="channel"
:channel-selected="isSelected(channel.id)"
:read-more-details="channelInfoDetails"
@select="onAddChannel"
@deselect="onRemoveChannel"
@read-more-changed="setChannelInfoDetails"
/>
每次渲染模板时唯一改变的是我循环的数组.... 这是问题的简化版本:
<template>
<div
ref="channels"
class="channels"
>
<div v-if="showCategories">
<div
v-for="category in sliderCategories"
:key="category.name"
>
<h3 v-text="category.name" />
<div
v-if="category.showAll"
class="channel-list show-all"
:class="channelListSize"
>
<ul>
<SelectCard looping over category.contents />
</ul>
</div>
<ChannelSlider
v-else
:category="category"
@visible-updated="setVisibleChannels"
>
<SelectCard looping over category.visibleChannels />
</ChannelSlider>
<div class="show-all-link">
<a
:class="category.showAll?'arrow-up':'arrow-down'"
class="link"
@keyup.enter="toggleShowAll(category.name, !category.showAll)"
@click="toggleShowAll(category.name, !category.showAll)"
v-text="showAllText(category.showAll)"
/>
</div>
</div>
</div>
<div v-else>
<div v-if="showNoSearchResult">
<SomeComponent with some props/>
</div>
<div :class="channelListSize" class="channel-list">
<ul>
<SelectCard looping over updatedChannels />
</ul>
</div>
</div>
<div
ref="someref"
class="someClass"
:style="{top: channelInfoDetails.top + 'px', position: 'absolute'}"
>
<AnotherComponent with some props/>
</div>
</div>
</template>
所以我的模板变得巨大,因为 SelectCard 代码有很多道具。
有没有办法可以将 SelectCard 放在父代码中的方法中,以便我可以使用数组调用函数或其他什么?还是有其他我不知道的解决方案?
【问题讨论】:
-
每个分支的标记真的只是一对包含
SelectCard的<div>元素吗?或者这是为了提出问题而进行的简化? -
@skirtle ,它是为了简化......每个 v-if/v-else 里面都有更多的模板。除了 SelectCard 之外,它们都没有相同的内容。
-
我已更新示例模板以使其更清晰
标签: javascript vue.js vue-component