2 回答

TA贡献1797条经验 获得超6个赞
我认为这里没有您想要的那么简单的解决方案。但也有一些可能性。
v-bind您可以使用和的对象形式将其略微减小v-on。对于v-bind您需要引入一个方法来返回对象,因为您的道具依赖于channeland index,因此它们需要传递给该方法。这会减少一点,但它不是很好。属性的对象形式is也可能是一个选项。这可能会进一步挤压它,但会以清晰度为代价。
另一种方法是引入另一个组件,然后为SelectCard. 例如:
<div>
<div v-if="conditionA">
<div v-if="conditionA-A">
<slot />
</div>
<div v-else>
<slot />
</div>
</div>
<div v-else>
<div v-if="conditionB-A">
<slot />
</div>
<div v-else>
<slot />
</div>
</div>
</div>
然后将SelectCardin 作为插槽内容传递,并使用计算属性使数组动态化。
这种方法的一个问题是,您可能会发现自己必须在组件的各个层之间传递很多东西才能使其正常工作。
另一种选择是将所有内容转换为render函数。您绝对可以使用函数来做您想做的事情,render但这会以不得不放弃使用模板为代价。这是否真的是一个问题将取决于模板其余部分的复杂性。

TA贡献1804条经验 获得超8个赞
将 的所有逻辑v-if's放入一个计算属性中,该属性返回您想要传递为的正确数组。SelectCard 类似于以下内容的道具:
<SelectCard :arr="arrayToRender"/>
...
computed: {
arrayToRender(){
if (ConditionA){ return Array_A}
if ....
}
添加回答
举报